程序异常终止的时候,是否会释放之前使用的对象的内存

jin_ok 2014-09-25 02:17:23
如题,当然大多数时候我们都会有异常处理的。假如程序异常结束.NET是否会释放之前使用的对象
...全文
292 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2014-09-26
  • 打赏
  • 举报
回复
引用 8 楼 Linux7985 的回复:
[quote=引用 7 楼 Z65443344 的回复:] 这个跟托管资源和非托管资源无关吧? 我们都知道文件是非托管资源 如果我打开个文件(不管是用什么软件打开的) 然后结束进程 有人见过结束进程之后文件还打不开的吗? 进程结束之后,所有由该进程申请的内存全部都会被系统回收掉.
.NET 是不会自动回收非托管的资源的。 Window系统是不会自动回收异常终止程序的资源的。[/quote] 得看资源是什么,硬盘临时文件不会被回收,应用程序所占内存还是会回收的。
蒋晟 2014-09-26
  • 打赏
  • 举报
回复
看是什么资源了。一些只在一个进程中存在的资源,比如分配的内存,会被释放。一些多个进程共享的资源会处于不确定状态,例如磁盘文件或者是内存映射文件中的数据可能是写到一半就终止的,无法保证数据完整性。Mutex会标记为已放弃,但是semaphore的引用计数不会减少。
adamjing_cn 2014-09-25
  • 打赏
  • 举报
回复
引用 11 楼 Z65443344 的回复:
除非是主线程崩溃了,但是还有子线程一直在运行,导致进程一直无法终止,占用着资源
+1
於黾 2014-09-25
  • 打赏
  • 举报
回复
除非是主线程崩溃了,但是还有子线程一直在运行,导致进程一直无法终止,占用着资源
於黾 2014-09-25
  • 打赏
  • 举报
回复
.NET确实不会自动回收非托管资源 但是.NET程序本身已经崩溃,进程已经终止 Windows系统仍然将终止的进程申请的内存在那里放着不管?
一aa一 2014-09-25
  • 打赏
  • 举报
回复
如果你新开了一个线程,那个线程不结束的话 他占用的资源是不会自己释放的
烈火蜓蜻 2014-09-25
  • 打赏
  • 举报
回复
引用 7 楼 Z65443344 的回复:
这个跟托管资源和非托管资源无关吧? 我们都知道文件是非托管资源 如果我打开个文件(不管是用什么软件打开的) 然后结束进程 有人见过结束进程之后文件还打不开的吗? 进程结束之后,所有由该进程申请的内存全部都会被系统回收掉.
.NET 是不会自动回收非托管的资源的。 Window系统是不会自动回收异常终止程序的资源的。
於黾 2014-09-25
  • 打赏
  • 举报
回复
这个跟托管资源和非托管资源无关吧? 我们都知道文件是非托管资源 如果我打开个文件(不管是用什么软件打开的) 然后结束进程 有人见过结束进程之后文件还打不开的吗? 进程结束之后,所有由该进程申请的内存全部都会被系统回收掉.
xian_wwq 2014-09-25
  • 打赏
  • 举报
回复
进程退出,占用资源肯定还给操作系统了
卧_槽 2014-09-25
  • 打赏
  • 举报
回复
程序都终止了,windows会回收所有资源。
j911 2014-09-25
  • 打赏
  • 举报
回复
进程结束后,进程资源由操作系统负责回收,不用担心。
明天上班 2014-09-25
  • 打赏
  • 举报
回复
要是你的程序里没有非托管资源是会回收的。
於黾 2014-09-25
  • 打赏
  • 举报
回复
如果你的程序连进程都结束了,那么它所调用的资源都会被系统回收 这个跟.Net就没有关系了
烈火蜓蜻 2014-09-25
  • 打赏
  • 举报
回复
如果你的代码里调用了非托管的资源,那么就不会,否则.NET GC会处理那些没有回收的资源的。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧