欢迎来到天天文库
浏览记录
ID:35597866
大小:171.50 KB
页数:18页
时间:2019-03-30
《毕业论文外文翻译--NET资源管理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、武汉科技大学本科毕业论文外文翻译.NETResourceManagementBill WagnerEffectiveC#:50SpecificWaystoImproveYourC#,Chapter2,.NETResourceManagement,Bill Wagner,AddisonWesleyProfessional,2004,77~115.NET资源管理比尔·瓦格拉EffectiveC#中文版改善C#程序的50种方法,第二章,.NET资源管理,比尔·瓦格拉,2004,77~11517武汉科技大学本科毕业论文外文翻译一个简单的事实:.Net应用程序是在一个托管的环境
2、里运行的,这个环境和不同的设计器有很大的冲突,这就才有了EffectiveC#。极大限度上的讨论这个环境的好处,须要把你对本地化环境的想法改变为.NetCLR。也就意味着要明白.Net的垃圾回收器。在你明白这一章里所推荐的内容时,有必要对.Net的内存管理环境有个大概的了解。那我们就开始大概的了解一下吧。垃圾回收器(GC)为你控制托管内存。不像本地运行环境,你不用负责对内存泄漏,不定指针,未初始化指针,或者一个其它内存管理的服务问题。但垃圾回收器前不是一个神话:你一样要自己清理。你要对非托管资源负责,例如文件句柄,数据链接,GDI+对象,COM对象,以及其它一些系统对
3、象。这有一个好消息:因为GC管理内存,明确的设计风格可以更容易的实现。循环引用,不管是简单关系还是复杂的网页对象,都非常容易。GC的标记以及严谨的高效算法可以检测到这些关系,并且完全的删除不可达的网页对象。GC是通过对从应用程序的根对象开始,通过树形结构的“漫游”来断定一个对象是否可达的,而不是强迫每个对象都保持一些引用跟踪,COM就是这样的。DataSet就是一个很好的例子,展示了这样的算法是如何简化并决定对象的所属关系的。DataSet是一个DataTable的集合,而每一个DataTable又是DataRow的集合,每一个DataRow又是DataItem的集合
4、,DataColum定义了这些类型的关系。这里就有一些从DataItem到它的列的引用。而同时,DataTime也同样有一个引用到它的容器上,也就是DataRow。DataRow包含引用到DataTable,最后每个对象都包含一个引用到DataSet。如果这还不够复杂,那可以创建一个DataView,它提供对经过过滤后的数据表的顺序访问。这些都是由DataViewManager管理的。所有这些贯穿网页的引用构成了DataSet。释放内存是GC的责任。因为.Net框架的设计者让你不必释放这些对象,这些复杂的网页对象引用不会造成问题。没有必须关心这些网页对象的合适的释放顺
5、序,这是GC的工作。GC的设计结构可以简化这些问题,它可以识别这些网页对象就是垃圾。在应用程序结束了对DataSet的引用后,没有人可以引用到它的子对象了(译注:就是DataSet里的对象再也引用不到了)。因此,网页里还有没有对象循环引用DataSet,DataTables已经一点也不重要了,因为这些对象在应用程序都已经不能被访问到了,它们是垃圾了。垃圾回收器在它独立的线程上运行,用来从你的程序里移除不使用的内存。而且在每次运行时,它还会压缩托管堆。压缩堆就是把托管堆中活动的对象移到一起,这样就可以空出连续的内存。图2.1展示了两个没有进行垃圾回收时的内存快照。所有的
6、空闲内存会在垃圾回收进行后连续起来。17武汉科技大学本科毕业论文外文翻译图2.1垃圾回收器不仅仅是移动不使用的内存,还移除动其它的对象,从而压缩使用的内存,让出最多的空闲内存。正如你刚开始了解的,垃圾回收器的全部责任就是内存管理。但,所有的系统资源都是你自己负责的。你可以通过给自己的类型定义一个析构函数,来保证释放一些系统资源。析构函数是在垃圾回收器把对象从内存移除前,由系统调用的。你可以,也必须这样来释放任何你所占用的非托管资源。对象的析构函数有时是在对象成为垃圾之后调用的,但是在内存归还之前。这个非确定的析构函数意味着在你无法控制对象析构与停止使用之间的关系(译注
7、:对象的析构与对象的无法引用是两个完全不同的概念。关于GC,本人推荐读者参考一下Jeffrey的".Net框架程序设计(修订版)"中讨论的垃圾回收器)。对C++来说这是个重大的改变,并且这在设计上有一个重大的分歧。有经验的C++程序员写的类总在构造函数内申请内存并且在析构函数中释放它们://好的C++,坏的C#:classCriticalSection{public: //构造系统需要的资源 CriticalSection() {EnterCriticalSection(); } //销毁资源 ~CriticalSection() {ExitCrit
此文档下载收益归作者所有