gpt4 book ai didi

c# - 不会被释放的静态变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:30 33 4
gpt4 key购买 nike

我有一个 static StreamWriter我类的变量:

private static StreamWriter streamWriter = CreateStreamWriter(pathToFile);

我没有在我的应用程序中关闭此 StreamWriter,因为它需要在应用程序运行时打开。

如果我多次启动和停止此应用程序,我会出现内存泄漏吗?还是在关闭应用程序时正确处理了对象?

此类是 ASP.NET MVC 4 和 WPF 应用程序都使用的实用程序类。

感谢大家的回复。这是我添加的代码:

在包含 StreamWriter 的类中:
public static void OnApplicationExit(object sender, EventArgs e)
{
try
{
streamWriter.Flush();
streamWriter.Close();
streamWriter.Dispose();
}
catch { }
}

public static void OnApplicationExit()
{
try
{
streamWriter.Flush();
streamWriter.Close();
streamWriter.Dispose();
}
catch { }
}

在 ASP.NET MVC Global.Asax 中:
    protected void Application_End()
{
Utilities.MyClass.OnApplicationExit();
}

最佳答案

If I start and stop this app many many times, will I get a memory leak?



不会。当进程结束时,与进程关联的所有资源都会自动返回给操作系统。这是 Windows 的一个功能;所有进程都是如此,而不仅仅是托管代码进程。

正如其他人指出的那样,您可能会丢失数据,但不会泄漏内核对象。

is the object disposed of properly upon closing the app?



不必要。如果应用程序因“快速失败”而终止,那么显然没有终结器运行,因为没有任何东西运行。如果应用程序被未处理的异常终止,那么终结器是否运行是实现定义的。

此外,正如 Raymond Chen 曾经指出的那样,当您知道进程正在关闭时运行终结器就像在拆除建筑物之前扫地一样。这是浪费时间和精力。

简而言之,您不应该依赖运行终结器来确保程序的正确性。

关于c# - 不会被释放的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15048580/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com