博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
强制回收和IDisposable.Dispose方法
阅读量:6947 次
发布时间:2019-06-27

本文共 1202 字,大约阅读时间需要 4 分钟。

如果某对象的 Dispose 方法被调用一次以上,则该对象必须忽略第一次调用后的所有调用。 如果对象的 Dispose 方法被多次调用,该对象一定不要引发异常。 Dispose 之外的实例方法在资源已释放时会引发 。

用户可能期望资源类型使用特定的约定来表示已分配状态和已释放状态。流类即是这样一种示例,传统上认为它们要么打开要么关闭。具有此种约定的类的实施者可能选择实现具有自定义名称(如“Close”)的公用方法来调用 Dispose 方法。

因为 Dispose 方法必须显式进行调用,所以,实现  的对象还必须实现一个终结器,以便在未调用 Dispose 时处理释放资源问题。 默认情况下,垃圾回收器会在回收一个对象的内存之前自动调用该对象的终结器。然而,在调用 Dispose 方法后,通常不需要垃圾回收器调用已释放对象的终结器。 为防止自动终止,Dispose 实现可以调用 方法。

强制垃圾回收

.NET Framework 2.0
   
垃圾回收 
提供 
,您可以使用该方法让应用程序在一定程度上直接控制垃圾回收器。通常情况下,您应该避免调用任何回收方法,让垃圾回收器独立运行。在大多数情况下,垃圾回收器在确定执行回收的最佳时机方面更有优势。但是,在某些不常发生的情况下,强制回收可以提高应用程序的性能。当应用程序代码中某个确定的点上使用的内存量大量减少时,在这种情况下使用 
GC.Collect
 方法可能比较合适。例如,应用程序可能使用引用大量非托管资源的文档。当您的应用程序关闭该文档时,您完全知道已经不再需要文档曾使用的资源了。出于性能的原因,一次全部释放这些资源很有意义。有关更多信息,请参见 

  在垃圾回收器执行回收之前,它会挂起当前正在执行的所有线程。如果不必要地多次调用 GC.Collect,这可能会造成性能问题。您还应该注意不要将调用 GC.Collect 的代码放置在程序中用户可以经常调用的点上。这可能会削弱垃圾回收器中优化引擎的作用,而垃圾回收器可以确定运行垃圾回收的最佳时间。

被动回收

.NET Framework 4
  在大多数情况下,垃圾回收器可以确定执行回收的最佳时间,应让其独立运行。 
在某些不常发生的情况下,强制回收可以提高应用程序的性能。 在这些情况下,可使用  方法强制垃圾回收,以引发垃圾回收。

  当应用程序代码中某个确定的点上使用的内存量大量减少时,请使用  方法。 例如,如果应用程序使用包含若干个控件的复杂对话框,则在对话框关闭时调用  可能会通过立即回收内存来提高性能。 务必确保应用程序不会过于频繁地引发垃圾回收,否则当垃圾回收器无效率地尝试回收对象时,可能会使性能降低。  模式使垃圾回收器可以根据收集是否有效率来确定是否进行回收。

转载于:https://www.cnblogs.com/yhlx125/p/3816415.html

你可能感兴趣的文章
死锁排查的小窍门 --使用jdk自带管理工具jstack
查看>>
unity3d 动态添加地面贴图 草地
查看>>
P1101 单词方阵
查看>>
安卓开发者必备的42个链接
查看>>
DeadLine
查看>>
2018-2019 Exp2 后门原理与实践
查看>>
bzoj5137 [Usaco2017 Dec]Standing Out from the Herd
查看>>
Mysql压缩包版zip的安装方法
查看>>
UWP 动画
查看>>
浅析设计模式(二)——工厂方法模式
查看>>
ubuntu设置开机开启小键盘[Linux]
查看>>
syq小姐姐的分享的历年考试经验
查看>>
linux 实践2.2 编译模块
查看>>
FAQs: 当在Outlook Explorer中右击邮件时,如何向上下文菜单添加按钮?(VSTO技术)...
查看>>
使用Java纯代码实现MySQL的连接
查看>>
面试宝典-面试题1
查看>>
javascript 数组排重
查看>>
DAY1 linux 50条命令
查看>>
http://hi.baidu.com/13655092904/blog
查看>>
Eclipse设置Tab键为四个空格
查看>>