T采用引用计数不再合适,因此它就放弃了引用计数,改用垃圾回收(Garbage Collection)。
大约40年前,John McCarthy设计了LISP语言,它是可考证的第一种编程语言。LISP运行时不断地分配和释放大量的小块内存,由于那时的计算机内存远远没有现在这么庞大,因此早期的LISP用户很快感到内存不足,同时许多不再使用的内存却未能利用起来。为了解决这个问题,McCarthy于1959年第一次提出了垃圾回收的思想。
在一个真正面向对象的系统中,垃圾回收机制能够很好地满足分配和释放大量小块内存的需要。因此,Microsoft在VS.NET中重新实现了垃圾回收机制。
CLR垃圾回收器(CLR Garbage Collector)的主要任务就是监视程序使用的资源,当可用资源达到某个确定的极限时查找不再使用的对象,如发现有这类对象存在则释放它们所占用的资源。垃圾回收的一个很大的优点是程序员无需再为大多数常见的循环引用担心。在循环引用情形下,子对象拥有对父对象的引用,同时父对象又拥有对子对象的引用。在引用计数模式下,循环引用阻止了系统释放和拆除任意一个对象。然而,垃圾回收器能够找出这类循环引用并拆除它们。垃圾回收机制同时也意味着,当对象的最后一个引用被释放时,对象并不一定立即被拆除。
采用垃圾回收机制的一个后果是:我们不能再希望类的Terminate事件总是适时触发。事实上,如果线程被阻塞的话,Terminate事件可能完全不会触发。这就是所谓的“非确定的结束”(non-deterministic finalization),而COM提供的则是“确定的结束”。由于缺乏“确定的结束”,再加上因为垃圾回收器重新组织和整理内存导致不能运用指针,新闻组中出现了对该问题激烈的争论:有些人憎恨这些新的限制,因为他们依赖于“确定的结束”;有些人觉得无关紧要,因为他们并不依赖于Terminate事件。
从引用计数转变到垃圾回收仅仅是Visual Studio.NET底层体系不再是COM这一变化的诸多必然结果之一。虽然VB.NET之内仍旧可以使用COM对象,但这些对象必须通过封装(Wrapper)才能访问。任何时候,封装都意味着性能的降低,甚至还有可能导致对象行为的异常。如果要迁移一个大量使用COM对象的工程,你必须认真地进行计划和测试,应用程序的某些部分可能还需要重新构造。
大约40年前,John McCarthy设计了LISP语言,它是可考证的第一种编程语言。LISP运行时不断地分配和释放大量的小块内存,由于那时的计算机内存远远没有现在这么庞大,因此早期的LISP用户很快感到内存不足,同时许多不再使用的内存却未能利用起来。为了解决这个问题,McCarthy于1959年第一次提出了垃圾回收的思想。
在一个真正面向对象的系统中,垃圾回收机制能够很好地满足分配和释放大量小块内存的需要。因此,Microsoft在VS.NET中重新实现了垃圾回收机制。
CLR垃圾回收器(CLR Garbage Collector)的主要任务就是监视程序使用的资源,当可用资源达到某个确定的极限时查找不再使用的对象,如发现有这类对象存在则释放它们所占用的资源。垃圾回收的一个很大的优点是程序员无需再为大多数常见的循环引用担心。在循环引用情形下,子对象拥有对父对象的引用,同时父对象又拥有对子对象的引用。在引用计数模式下,循环引用阻止了系统释放和拆除任意一个对象。然而,垃圾回收器能够找出这类循环引用并拆除它们。垃圾回收机制同时也意味着,当对象的最后一个引用被释放时,对象并不一定立即被拆除。
采用垃圾回收机制的一个后果是:我们不能再希望类的Terminate事件总是适时触发。事实上,如果线程被阻塞的话,Terminate事件可能完全不会触发。这就是所谓的“非确定的结束”(non-deterministic finalization),而COM提供的则是“确定的结束”。由于缺乏“确定的结束”,再加上因为垃圾回收器重新组织和整理内存导致不能运用指针,新闻组中出现了对该问题激烈的争论:有些人憎恨这些新的限制,因为他们依赖于“确定的结束”;有些人觉得无关紧要,因为他们并不依赖于Terminate事件。
从引用计数转变到垃圾回收仅仅是Visual Studio.NET底层体系不再是COM这一变化的诸多必然结果之一。虽然VB.NET之内仍旧可以使用COM对象,但这些对象必须通过封装(Wrapper)才能访问。任何时候,封装都意味着性能的降低,甚至还有可能导致对象行为的异常。如果要迁移一个大量使用COM对象的工程,你必须认真地进行计划和测试,应用程序的某些部分可能还需要重新构造。
七、面向Web的支持
除了Windows Forms新引擎之外,.NET还包含了一个专门为构造Web窗体设计的窗体引擎,称为Web Forms。这个引擎的目标在于让用户能够象创建传统Windows桌面应用的窗体一样方便地创建Web窗体。Web Forms是一种ASP.NET技术,通过它我们可以使用熟悉的RAD(快速程序开发)工具构造出带有执行代码的窗体。不过,窗体中的ASP.NET代码以编译方式在服务器端运行,经过处理后把结果HTML发送给支持HTML 3.2的浏览器。
客户端事件数据由底层框架截获并发送到服务器。这意味着应用界面不再受浏览器类型的约束,意味着有大量UI工具可供使用,意味着用户可以充分发挥现有的窗体制作技巧。如果应用没有必要做到浏览器中立,那么它就可以利用IE浏览器的各种特色。有了Web Forms,我们将能够更轻松地为那些具有Web功能的应用构造出更好、更丰富的用户界面。
&n
| 对此文章发表了评论 |

