全面剖析VB.NET(6)

2016-01-29 12:06 5 1 收藏

全面剖析VB.NET(6),全面剖析VB.NET(6)

【 tulaoshi.com - vb 】

由CLR导致的体系上的不同不仅仅是跨语言继承、共享功能和受管理代码,它还有更深刻的意义。Visual Studio.NET的底层体系不再是COM;另外,VB.NET中所有东西都是对象,甚至连字符串也一样。由于这些原因以及其他许多原因,Microsoft改变了底层体系管理对象的方法。COM系统通过引用计数方式管理对象,每当对象被引用时,引用计数就增加。当对象引用超出作用范围或者被释放时,计数器的值就减少;一旦引用计数为0,对象就被释放。Microsoft声称.NET体系中的引用计数开销实在太大,使得.NET采用引用计数不再合适,因此它就放弃了引用计数,改用垃圾回收(Garbage Collection)。

大约40年前,John McCarthy设计了LISP语言,它是可考证的第一种编程语言。LISP运行时不断地分配和释放大量的小块内存,由于那时的计算机内存远远没有现在这么庞大,因此早期的LISP用户很快感到内存不足,同时许多不再使用的内存却未能利用起来。为了解决这个问题,McCarthy于1959年第一次提出了垃圾回收的思想。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/vb/)

在一个真正面向对象的系统中,垃圾回收机制能够很好地满足分配和释放大量小块内存的需要。因此,Microsoft在VS.NET中重新实现了垃圾回收机制。

CLR垃圾回收器(CLR Garbage Collector)的主要任务就是监视程序使用的资源,当可用资源达到某个确定的极限时查找不再使用的对象,如发现有这类对象存在则释放它们所占用的资源。垃圾回收的一个很大的优点是程序员无需再为大多数常见的循环引用担心。在循环引用情形下,子对象拥有对父对象的引用,同时父对象又拥有对子对象的引用。在引用计数模式下,循环引用阻止了系统释放和拆除任意一个对象。然而,垃圾回收器能够找出这类循环引用并拆除它们。垃圾回收机制同时也意味着,当对象的最后一个引用被释放时,对象并不一定立即被拆除。

采用垃圾回收机制的一个后果是:我们不能再希望类的Terminate事件总是适时触发。事实上,如果线程被阻塞的话,Terminate事件可能完全不会触发。这就是所谓的“非确定的结束”(non-deterministic finalization),而COM提供的则是“确定的结束”。由于缺乏“确定的结束”,再加上因为垃圾回收器重新组织和整理内存导致不能运用指针,新闻组中出现了对该问题激烈的争论:有些人憎恨这些新的限制,因为他们依赖于“确定的结束”;有些人觉得无关紧要,因为他们并不依赖于Terminate事件。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/vb/)

从引用计数转变到垃圾回收仅仅是Visual Studio.NET底层体系不再是COM这一变化的诸多必然结果之一。虽然VB.NET之内仍旧可以使用COM对象,但这些对象必须通过封装(Wrapper)才能访问。任何时候,封装都意味着性能的降低,甚至还有可能导致对象行为的异常。如果要迁移一个大量使用COM对象的工程,你必须认真地进行计划和测试,应用程序的某些部分可能还需要重新构造。

来源:https://www.tulaoshi.com/n/20160129/1484657.html

延伸阅读
标签: vb
概述:这篇文章为计划将他们的应用程序更新到Visual Basic.NET的微软Visual Basic 开发用户提供一些关于XML的建议。主要包括Visual Basic 6和Visual Basic.NET对XML操作的不同之处,以及Visual Basic.NET关于这方面新增工具的应用。 概述:这篇文章为计划将他们的应用程序更新到Visual Basic.NET的微软Visual Basic 开发用户提供一些关于...
今天看到能够进行 C# to VB.Net 代码转换的网址: 发现并不能很完美的转换成VB.Net,毕竟C#的有些特定代码VB.Net是没有的. 不过可以用来学习,也不错! #1: http://www.aspalliance.com/aldotnet/examples/translate.aspx #2: http://www.kamalpatel.net/ConvertCSharp2VB.aspx
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing If MsgBox("請注意看關閉的視窗", MsgBoxStyle.Question + MsgBoxStyle.OKCancel, "關閉") = MsgBoxResult.OK Then Dim d As Double For d = 1 To 0 + 0.2 Step -0.2 System.Threading.Thread.Sleep(50) Applic...
标签: vb
(1).视窗2000服务器版 (2). .Net FrameWork SDK Beta 2 二.初步认识注册表: 首先我们来了解一下注册表的组成。在注册表中,子树是主要节点,包括健、子健和值。健就是打开"注册表编辑器"后,出现在"注册表编辑器"左窗格中的文件夹,健可以包含子健和值健。子健就是健中的健,在注册表中,子健属于树和健。值健...
----------VB.NET 导出数据到EXCEL中------------- 在引用当中引入Microsoft Excel 11.0 Object Library Dim oExcel As New Excel.ApplicationDim obook As Excel.WorkbookDim oSheet As Excel.WorksheetDim DataArray(2000, 2000) As Integerobook = oExcel.Workbooks.Open("c:\1.xls")oSheet = obook.Worksheets(1)...

经验教程

931

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部