C# .NET 对象处置

标签 c# .net object garbage-collection dispose

应该很简单。假设我有以下代码:

void Method()
{
   AnotherMethod(new MyClass());
}

void AnotherMethod(MyClass obj)
{
   Console.WriteLine(obj.ToString());
}

如果我调用“Method()”,在此过程中创建的 MyClass 对象会发生什么情况?调用后它是否仍然存在于堆栈中,即使没有任何东西在使用它?还是立即删除?

我是否必须将它设置为 null 才能让 GC 更快地注意到它?

最佳答案

在对 Method 的调用完成后,您的 MyClass 对象仍然存在,但没有根值对它的引用。因此它将一直存在到下一次 GC 运行时将被收集并回收内存。

除了强制 GC 之外,您真的无法加快此过程。然而,这可能是个坏主意。 GC 旨在清理此类对象,您为使其更快而做出的任何尝试都可能导致其整体变慢。您还会发现 GC 在正确清理托管对象的同时,实际上可能不会减少系统中的内存。这是因为 GC 保留它以备将来使用。这是一个非常复杂的系统,通常最好留给它自己的设备。

关于C# .NET 对象处置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2111089/

相关文章:

c# - .NET 整数与 Int16?

c# - 由于写权限,单元测试在 Visual Studio Team Services Build runner 上失败?

c# - 在 BizTalk 2009 中查找外部程序集的用法

c# - WIC/WPF : System. GPS.Longitude 和 System.GPS.Latitude 总是返回 NULL(通过 BitmapMetadata)

javascript - 在函数中传递对象

javascript - 如何合并数组中的多维对象而不改变对象内部的对象

Javascript 循环遍历包含逗号分隔值的数组键

c# - 为什么我应该使用 IHttpActionResult 而不是 HttpResponseMessage?

c# - ASP.NET MVC : Verify that editing record is allowed (ownership)

c# - 如何记录 PC Lock、Shutdown、Restart Event 的时间(可能是日期时间)?