文件名称:内存管理-基于javascript实现报警器提示音效果
文件大小:56.6MB
文件格式:PDF
更新时间:2024-07-29 11:57:21
VB2010 高级编程 文字版
4.5 内存管理 本节介绍托管代码的底层元素之一一一内存管理。 .NET应用程序被称为托管程序的 4个原因缸 子,内存的释放是由系统臼动完成的。 CLR 的内存管理克服了 COM 内存程:理的缺陷. 开发人员习 惯于仅在抽象层面上考虑内存管理。其基本规则是每一个创建的对象和分配的内存都应当被释放(销 毁). CLR 引入了垃圾回收器(GC),简化了这个过程。以前,如果组件不能合理地释放其对象引用 !oc分配的内存就会导致Web 服务器崩溃. 尽管如此, GC 的使用面临新的问题一一何时需要显式释放对象,是否需要释放对象?手动编 写代码以分配和同收内存和系统资源时,要遵循两个基本规则。第一是释放所有的共享资源,比如 文件句柄和数在引车遥撞。 这些都要显式声明,我们在后面讨论。手动管理内存的第二个原则是,部 主E告诉系统应用程序何时不再使用某块内存。 Vìsual Basic COM 开发人员已经习惯于将变量设置为 Nothing,以显式地释放对象引用。但在.NET 中,虽然可以将变量手动设置为 Nothing,显示指定释 放对象,们这并没有实际释放资源。 .NET 使用垃圾回收器自动回收己分配的内存, 因此不需要显式进行内存管理。但是由于这是 个臼动系统, 我们无法确定资源何时'释放。在一个方法中使用的资源有可能在方法结束后仍在内存 中。更重耍的是, 垃圾罔收机制有可能会在执行方法代码的过程中用收对象,不过好在系统确保了 问收只在后面的代码不再引用对象的情况下才会进行。 例如,把对象设置为 Notbing 可以宦接把对象清山内存。因此在方法的最后把变最设为 Nothing , 系统就不会再使用垃极间收机制来回收X'J象。但这种做法不值得推荐,毕竟,如果仅仅是为了表明 开发人员的意图, 使用注释就足够了。 下面儿节将介绍传统内存管理方法的缺陷以及基于 COM 的内存管理存在的问题, 详细讨论士在 圾阳收器的工作原理以及 GC 是如何解决这些问题的。 我们将重点介绍如何与垃圾回收器交互, 以 及在.NET 中为什么推荐使用 Using 命令和终止方法。 4.5.1 传统的垃圾回收机制 非托管的(COMNisual Basic 6)运行库环境的内存管理功能十分简单,它只是自动释放应用汗如子 不再引用的对象。 一旦某个对象上的全部引用都被释放,运行席将自动从内存中释放郎才象。 例如, 下面的这段 Visual Basic 6 代码使用 Scripting.FileSystem 对象给日志文件舔加一项: ' 只equires a reference to Microsoft Scripting Runtime (scrrun .dll) 223