Artech

Develop every application as an art using the most suitable technologies!

常用链接

统计

积分与排名

CnBlogs

专家的Blog|主页

最新评论

A. .NET Framework

[原创]一个通过BackgroundWorker实现WinForm异步操作的例子
     摘要: 在最近的一个Smart Client项目中,为了演示异步操作的实现,写了一个基于BackgorundWorker的例子。由于这个理基本上实现了BackgorundWorker的大部分功能:异步操作的启动、操作结束后的回调、异步操作的撤销和进度报告等等。尽管没有太多的技术含量,姑且放上来与大家分享。  阅读全文

posted @ 2008-07-30 09:44 Artech 阅读(2584) | 评论 (10)  编辑

[原创-总结]深入理解C# 3.x的新特性系列总结
     摘要: 较之C# 2.0, C# 3.x引入了一些列新的特性,为我们编程带来很大的便利,通过有效地利用这些新特性,我们可以编写出更加简洁、优雅的程序。不过这些新特性仅仅是编译器给我们耍的小花招:在编译的时候加入一些必要的Code,使这些在C# 2.0角度看略显残缺的Code变得“完整”,实际上最终生成的Assembly和在C# 2.0时代并没有本质的不同。为此,有些人对这些新特性不以为然,觉得仅仅是一些表面文章,是鸡肋。但是我的观点是:既然这些特性能给我们的编程带来便利,干嘛不用呢?  阅读全文

posted @ 2007-10-07 12:38 Artech 阅读(5148) | 评论 (26)  编辑

[原创]深入理解C#3.x的新特性(4):Automatically Implemented Property
     摘要: 深入理解C#3.x的新特性系列在沉寂一个月之后,今天继续。在本系列前3部分中,我们分别讨论了Anonymous TypeExtension Method Lambda Expression,今天我们来讨论另一个实用的、有意思的New feature: Automatically Implemented Property。  阅读全文

posted @ 2007-09-15 21:07 Artech 阅读(3445) | 评论 (30)  编辑

[原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression
     摘要: 继上一章,介绍Extension Method之后,我们接着来介绍另一个重要的特性:Lambda Expression。在前面的两篇文章中,我一再在强调这样的一个概念:C# 3.x新引入的这些特性仅仅反映在Programming Language和相应的Compiler层面。通过编译生成的Assembly的IL和原来并没有本质的改变。从这个意义上讲,所有的这些其实是编译器给我们玩得障眼法而已。Lambda Expression也不例外, Lambda Expression就是一个Anonymous Delegate,无论是Named Delegate也好、Anonymous Delegate也好,其本质也就是一个Delegate。  阅读全文

posted @ 2007-08-22 13:44 Artech 阅读(3666) | 评论 (26)  编辑

[原创]What is "Type" in managed heap?
     摘要: 我们知道,在程序运行过程中,每个对象(object)都是对应了一块内存,这里的对象不仅仅指的是某个具体类型的实例(instance),也包括类型(type)本身。我想大家也很清楚 CLR如何为我们创建一个类型的实例(instance)的:CLR计算即将被创建的Instance的size(所有的字段加上额外的成员所占的空间: TypeHandle和SyncBlockIndex);在当前AppDomain对应的managed heap中为之开辟一块连续的内存空间;初始化Instance的这两个额外的成员TypeHandle和SyncBlockIndex ;最后调用对应的constructor。

在面向对象的原则下,Instance的 Field代表的是对象的状态(state), 而方法则体现的是对象的行为(behavior)。状态只能和具体的Instance绑定在一起,而属于同一类型的不同的Instance则具有一样的行为,所以行为是和Type绑定在一起的。同时Type定义了很多原数据的信息。这些基于Type的信息是如何保存的,今天我们就来简单地讨论这个问题。  阅读全文

posted @ 2007-06-04 03:50 Artech 阅读(3473) | 评论 (32)  编辑

[原创]再说String
     摘要: 在前两个月的时间内,我在园子里发表的两片介绍字符串的恒定性的文章:《字符串的驻留(String Interning)》和《深入理解string和如何高效地使用string》。前几天Anytao在他的《品味类型---值类型与引用类型(中)-规则无边》的文章中,针对字符串的恒定性展开了很好的讨论,昨天首页上又出现了亚历山大同志的讨论性质的帖子《关于String的终极解释》。大家已经讨论得很完备了,在这里我只是根据我自己的理解对此作一些补充。  阅读全文

posted @ 2007-05-31 00:54 Artech 阅读(4088) | 评论 (32)  编辑

[原创]如何改善Managed Code的Performance和Scalability系列之二:深入理解string和如何高效地使用string
     摘要: 无论你所使用的是哪种编程语言,我们都不得不承认这样一个共识:string是我们使用最为频繁的一种对象。但是string的常用性并不意味着它的简单性,而且我认为,正是由于string的频繁使用才会促使其设计人员在string的设计上花大量的功夫。所以正是这种你天天见面的string,蕴含了很多精妙的设计思想。  阅读全文

posted @ 2007-05-06 15:30 Artech 阅读(5179) | 评论 (38)  编辑

[原创]如何改善Managed Code的Performance和Scalability系列之一:由for V.S. for each想到的
     摘要: 一直想写一系列如何提高Performance和Scalability的文章,把我的相关经验和所知道的相关的技巧同大家分享。前一阵在园子里有一篇讨论for each 和 for两种循环那个具有更好的performance的blog,议论得沸沸扬扬。我觉得这是一个很好的切入点,我就已此作为引子,开始我的这个系列的文章。这篇文章的重点不是在于比较这两种循环孰优孰劣,我将讨论的重点是如何更好地定义Collection,如何在判断在什么时候该用Array,什么时候用Collection。  阅读全文

posted @ 2007-05-02 19:25 Artech 阅读(16713) | 评论 (40)  编辑

[原创]我所理解的Remoting(2):远程对象生命周期的管理—Part I
     摘要: 在.NET中提到对象的生命周期,我们会不由自主地想到CLR的垃圾回收。在运行一个.NET程序过程中,我们通过某种方式,比如通过new操作符,通过反序列化,通过反射机制,创建一个对象,CLR在为这个对象在托管堆中开辟一块内存空间。随着程序的运行,创建的对象越来越多,托管堆中的可用的内存越来越少,必须有一种机制来判断被分配在托管堆中的对象那些已经不被使用,以及进行对这些对象占用的内存进行回收。这种机制被称为CLR自动内存管理,也就是我们常说的垃圾回收。为了说清楚远程对象的生命周期管理,我们 得首先了解本地对象的生命周期。  阅读全文

posted @ 2007-03-22 15:56 Artech 阅读(3048) | 评论 (7)  编辑

[原创].NET Framework:用Coding证明Application Domain的隔离性
     摘要: Application Domain可以看作是一个Assembly的逻辑容器。在程序执行过程中,如果遇到需要的Type并没有定义在已经加载的Assemblies中,CLR会把相应的Assembly加载的该Application Domain中。每个Application Domain都有一个属于自己的加载器堆(Loader Heap),用于维护从Application Domain创建以后所用到的所有的Type,以及这些Type对应的方法表——维护这样一个Mapping:定义在Type中的所有方法和经过JIT编译后x86代码(只考虑32bit处理器)。 Application Domain之间是相互隔离,互不干扰。在一个Application Domain创建的对象不能被另一个Application Domain直接调用,反映在内存分配上面——就是各个Application Domain使用各个独立的内存地址空间。一个对象根据他所对应的类型(如System.MarshalByRefObject通过传递引用的方式)或者属性(比如对于定义了System. Serializ  阅读全文

posted @ 2007-03-05 23:58 Artech 阅读(12868) | 评论 (36)  编辑

[原创].Net Framework: 字符串的驻留(String Interning)
     摘要: 关于字符串的驻留的机制,对于那些了解它的人肯定会认为很简单,但是我相信会有很大一部分人对它存在迷惑。在开始关于字符串的驻留之前,先给出一个有趣的Sample...  阅读全文

posted @ 2007-03-04 23:03 Artech 阅读(13365) | 评论 (32)  编辑