【问题标题】:What happens if i do not dispose unmanaged resources after the program is closed如果我在程序关闭后不处置非托管资源会发生什么
【发布时间】:2016-08-21 04:55:56
【问题描述】:

所以我从某人那里听说它根本不会发布,但这是什么意思? 即使您关闭程序,它也会保留在内存中?这是怎么回事?

找不到答案,如果这是重复的或对于论坛来说不够好 Q 请告诉我,因为我真的找不到答案

【问题讨论】:

  • 你在谈论垃圾收集。当程序关闭时,GC 部分会删除所有分配的内存。
  • GC 不适用于非托管资源。
  • 说明您关注的资源。或者,向告诉你这个疯狂事情的​​“人”举个具体的例子。
  • @Eric Lippert 不受管理,没什么特别的,在我的情况下是一些网络嗅探器。我有一个服务,我的问题是我应该在服务结束事件中处理它吗?
  • 当终结器在一毫秒后运行时,对对象调用 Dispose() 是没有意义的。鉴于您对此非常不安全,请养成始终调用 Dispose() 的习惯。许多 .NET 程序员都这样做了,他们永远不会错。

标签: c# memory dispose finalize unmanagedresources


【解决方案1】:

这意味着只要用于运行程序的进程存在,该资源就不会被其他进程使用。

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

一旦进程死亡或被杀死,操作系统就应该为其余进程提供资源。

【讨论】:

  • 我认为,每个程序都可以访问操作系统分配给它的内存。所以关闭程序后,所有已分配和未分配的记忆都会被清除,不是吗?
  • @npinti 所以从你所说的来看,如果我有服务,那么在服务结束事件中,我不需要对任何非托管资源调用 dispose,因为程序已经结束了..?
  • @SiyavashHamdi:在某些情况下,您可能会关闭您的程序,但由于某种原因,它曾经运行的进程并没有终止。这意味着使用的资源仍然不会被释放。
  • @omriman12:你可以这样做,但到目前为止这不是好的做法,而且绝对不是生产级软件的方法。不过,您不应该完全依赖操作系统为您清除资源。
  • @omriman12 如果 进程 结束,那么是的,操作系统将处置它为其持有的几乎所有类型的非托管资源。但这是操作系统为意外结束的进程所做的事情。您应该在正常情况下自己处理所有非托管资源(除非您在流程结束之前需要它们,否则在不再需要它们时释放它们,而不是等待关闭)
猜你喜欢
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2013-01-20
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多