我有一个Windows应用程序,我在内存中加载了大量数据(我知道将大量数据加载到内存中不是一个好选择,但我没有选择)。
在某些情况下,我使用Application.Exit()
方法退出了我的应用程序。
我对释放应用程序所占用的内存的过程感到困惑。即当我致电Application.Exit()
时,会在内部拨打GC.Collect()
,或者我自己先致电GC.Collect()
,然后再Application.Exit()
会更好吗?
Application.Exit()
如何在内部运作?
我试图通过谷歌搜索找到答案,但没找到我要找的东西。
答案 0 :(得分:3)
我认为您的主要问题是您将全局资源与流程资源混淆。垃圾收集器负责管理进程内的内存。它是一个进程资源,对系统中其他进程可用的内存没有影响。在退出之前GC是否运行对系统上的其他进程无意义
答案 1 :(得分:1)
使用像NET这样的框架的一个好处是不要担心这些细节 当然,您需要尝试尽可能降低内存使用率,但释放应用程序使用的MANAGED内存的工作量是保留给框架的工作,不会因为您的应用程序被终止而停止清理内存引用Application.Exit()
至于Application.Exit()的代码,很容易在互联网上找到
private static bool ExitInternal()
{
bool flag = false;
lock (internalSyncObject)
{
if (exiting)
{
return false;
}
exiting = true;
try
{
if (forms != null)
{
foreach (Form form in OpenFormsInternal)
{
if (form.RaiseFormClosingOnAppExit())
{
flag = true;
break;
}
}
}
if (!flag)
{
if (forms != null)
{
while (OpenFormsInternal.Count > 0)
{
OpenFormsInternal[0].RaiseFormClosedOnAppExit();
}
}
ThreadContext.ExitApplication();
}
return flag;
}
finally
{
exiting = false;
}
}
return flag;
}
答案 2 :(得分:1)
一旦进程终止,就会释放属于它的所有资源。这是由操作系统执行的;一旦进程被杀死,就不会有泄漏的可能性。
垃圾收集器负责在进程的生命周期内管理内存分配;一旦流程退出,它对这些资源的变化没有影响。
也就是说,Application.Exit()不会强制进程终止;它只关闭所有应用程序窗口。是否终止进程取决于进程正在执行的操作。要强制进程退出,请调用Environment.Exit()。