Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果在程序关闭后不处置非托管资源,会发生什么情况_C#_Memory_Dispose_Finalize_Unmanagedresources - Fatal编程技术网

C# 如果在程序关闭后不处置非托管资源,会发生什么情况

C# 如果在程序关闭后不处置非托管资源,会发生什么情况,c#,memory,dispose,finalize,unmanagedresources,C#,Memory,Dispose,Finalize,Unmanagedresources,所以我听说有人说它根本就不会释放,但这意味着什么呢? 即使关闭程序,它也会留在内存中?这是怎么发生的 找不到答案,如果这是重复的或不够好,请让我知道,因为我真的找不到答案,这意味着,只要用于运行程序的进程存在,该资源将无法用于其他进程 这意味着您的程序占用了它不需要的项目,这可能会导致机器的整体性能下降 一旦进程死亡或被终止,那么操作系统就应该将资源提供给其余进程。你说的是垃圾收集。当程序关闭时,GC部分将删除所有分配的内存。GC不能处理非托管资源。请说明您关心的资源。或者,向告诉你这件疯狂事情

所以我听说有人说它根本就不会释放,但这意味着什么呢? 即使关闭程序,它也会留在内存中?这是怎么发生的


找不到答案,如果这是重复的或不够好,请让我知道,因为我真的找不到答案,这意味着,只要用于运行程序的进程存在,该资源将无法用于其他进程

这意味着您的程序占用了它不需要的项目,这可能会导致机器的整体性能下降


一旦进程死亡或被终止,那么操作系统就应该将资源提供给其余进程。

你说的是垃圾收集。当程序关闭时,GC部分将删除所有分配的内存。GC不能处理非托管资源。请说明您关心的资源。或者,向告诉你这件疯狂事情的“某人”询问一个具体的例子。@Eric Lippert未经管理,没有任何具体内容,在我的例子中是网络嗅探器。我有一个服务,我的问题是我应该在服务端事件中处理它吗?当对象的终结器在一毫秒后运行时,对对象调用dispose()是没有意义的。考虑到您对此非常不安全,请务必始终调用Dispose()。很多.NET程序员都是这样做的,他们从来没有错过。我认为,每个程序都可以访问操作系统分配给它的内存。那么在关闭程序后,所有分配的和未分配的内存都会被删除,不是吗?@npinti那么从你说的,如果我有服务,那么在服务端事件中,我不需要对任何非托管资源调用dispose,因为该程序已经结束。@SiyavashHamdi:可能会出现关闭程序的情况,但由于某些原因,它用来运行的进程没有终止。这意味着所使用的资源仍然不会被释放。@omriman12:你可以这样做,但这还不是一个好的实践,也绝对不是生产级软件的发展方向。不过,您不应该完全依赖操作系统为您清理资源。@omriman12如果进程结束,那么是的,操作系统将处理它为其保留的几乎所有类型的非托管资源。但对于意外结束的进程,操作系统会这样做。您应该在正常情况下自行处理所有非托管资源(除非您在流程结束前需要它们,否则在不再需要它们时释放它们,而不是等待关闭)