.net - 处理托管对象是否可以提高 .Net 的性能?

标签 .net garbage-collection

在托管对象上实现 Dispose() 也可以通过从 中获取提示来提高垃圾收集器的性能,从而可能绕过其整个过程的某些部分。

我看到了这个answer关于一个没有得到高票数的问题,但这是真的吗?如果是的话怎么办?

No that is wrong. I agree with Aaronaught. In addition, Microsoft recommends, in a mid 2003 webcast that Don Box presented, that every .Net developer should dispose of their own objects, whether managed or unmanaged, as this improves code performance by anything upto 20%. If done right it can be a substantial performance improvement. So its a core skill that every .net developer needs to know and use.

最佳答案

您根本不能以与调用Dispose释放文件句柄等相同的方式Dispose托管内存。可以清理托管内存的是垃圾收集器。

可以使用一个Dispose方法将类中的所有变量设置为null,希望这能让垃圾收集器尽早收集所有先前引用的对象 - 但在极少数情况下它实际上会有所帮助,因为通常您的对象无论如何都会同时符合收集条件。它还会让您的代码更加难以遵循。

在大多数情况下不必担心对象的生命周期是 C# 的好处之一 - 为什么要通过让每个类都实现 IDisposable 来摆脱它??您真的想自己管理“所有权”和生命周期吗?

我怀疑您误读了您在问题中引用的答案(诚然有点不清楚)。我不认为它提倡处置所有对象 - 我相信它提倡明确处置已经实现IDisposable的类型实例。这与纯托管类型无关,后者几乎从不实现 IDisposable

关于.net - 处理托管对象是否可以提高 .Net 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6620504/

相关文章:

c# - 重新初始化一个不工作的对象

c# - 用于处理任何事件的通用委托(delegate)类型

java - G1 GC——极长的终止时间

javascript - 将对象作为数组的数组进行垃圾收集

c# - IDictionary[index] 是否被滥用?

.net - SSDT(SSRS 和 SSAS)项目的 MSBuild 15.0 (Visual Studio 2017) 错误 MSB4067 : "The element <State> beneath element <Project> is unrecognized"

c# - ASP.NET MVC 传递 DateTime 来查看

c# - 第三方库中麻烦的 GC.collect() 调用

javascript - 如何跨窗口安全地传递对对象的引用?

c# - GC 不收集未引用的上下文对象?