WPF中如何释放掉子窗体所有的非托管资源?

在WPF中子窗体使用了本地资源,也就是说使用了给定路径下的文件,但是我要释放掉当前窗体中所使用的资源,代码如下:
FileStream fs = File.OpenRead(currentResource);
DisposableResource resourceObj = null;
try
{
resourceObj = new DisposableResource(fs);//DisposableResource类里面基础了IDisposable,以便资源Dispose掉
resourceObj.DoSomethingWithResource();
//fs.Close();
}
finally
{
if (resourceObj != null)
{
resourceObj.Dispose();
}
}

但是根本就没有效果,不知道是不是FileStream fs = File.OpenRead(currentResource);这里出了问题,因为这个又重新打开了,如果这里出了问题那么该怎么改?
...全文
1088 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 wodegege10 的回复:
using(FileStream fs = File.OpenRead(currentResource)) { DisposableResource resourceObj = null; try { resourceObj = new DisposableResource(fs);//DisposableResource类里面基础了IDisposable,以便资源Dispose掉 resourceObj.DoSomethingWithResource(); } finally { if (resourceObj != null) { resourceObj.Dispose(); } } }
这个还是没有效果,如果把这段代码注释掉的话内存还是差不多的。。。
  • 打赏
  • 举报
回复
引用 5 楼 Tian779278804 的回复:
[quote=引用 2 楼 duanzi_peng 的回复:]

if(fs!=null){
 fs.Close();
  fs.Dispose();
}
这个和我那个差不多啊。。。而且也没有释放掉内存,估计是fs的问题吧?因为我程序中已经打开了这个路径下的文件,在这里我又把这个文件打开然后再释放,最后结果相当于没有做任何操作,怎么获取已经打开的这个路径下的资源啊?关键问题应该在这里吧??[/quote] 打开过之后没有其它操作了没?试试使用using语句。
  • 打赏
  • 举报
回复
引用 6 楼 yuwenge 的回复:
非托管资源没有统一管理的地方,需要自己代码显式释放。
上面的代码就是显示释放掉啊,可是不知道哪里出了问题,运行了上面的代码之后和没有运行上面的代码内存是差不多大小的。
卧_槽 2014-08-07
  • 打赏
  • 举报
回复
非托管资源没有统一管理的地方,需要自己代码显式释放。
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:

if(fs!=null){
 fs.Close();
  fs.Dispose();
}
这个和我那个差不多啊。。。而且也没有释放掉内存,估计是fs的问题吧?因为我程序中已经打开了这个路径下的文件,在这里我又把这个文件打开然后再释放,最后结果相当于没有做任何操作,怎么获取已经打开的这个路径下的资源啊?关键问题应该在这里吧??
wenbin 2014-08-07
  • 打赏
  • 举报
回复
using(FileStream fs = File.OpenRead(currentResource)) { DisposableResource resourceObj = null; try { resourceObj = new DisposableResource(fs);//DisposableResource类里面基础了IDisposable,以便资源Dispose掉 resourceObj.DoSomethingWithResource(); } finally { if (resourceObj != null) { resourceObj.Dispose(); } } }
  • 打赏
  • 举报
回复
引用
说了是非托管资源啊,GC.Collect是回收托管资源的,能不能看下题目在回答啊
  • 打赏
  • 举报
回复

if(fs!=null){
 fs.Close();
  fs.Dispose();
}
wangnaisheng 2014-08-07
  • 打赏
  • 举报
回复
GC.Collect();
  • 打赏
  • 举报
回复
引用 10 楼 Tian779278804 的回复:
[quote=引用 8 楼 duanzi_peng 的回复:] [quote=引用 5 楼 Tian779278804 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:]

if(fs!=null){
 fs.Close();
  fs.Dispose();
}
这个和我那个差不多啊。。。而且也没有释放掉内存,估计是fs的问题吧?因为我程序中已经打开了这个路径下的文件,在这里我又把这个文件打开然后再释放,最后结果相当于没有做任何操作,怎么获取已经打开的这个路径下的资源啊?关键问题应该在这里吧??[/quote] 打开过之后没有其它操作了没?试试使用using语句。[/quote] 没有了,打开之后用工具查看了内存,和关闭之后的内存差不多的。using也是没有效果的。[/quote] 参考吧: http://msdn.microsoft.com/zh-cn/library/vstudio/b1yfkh5e(v=vs.100).aspx
  • 打赏
  • 举报
回复
引用 8 楼 duanzi_peng 的回复:
[quote=引用 5 楼 Tian779278804 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:]

if(fs!=null){
 fs.Close();
  fs.Dispose();
}
这个和我那个差不多啊。。。而且也没有释放掉内存,估计是fs的问题吧?因为我程序中已经打开了这个路径下的文件,在这里我又把这个文件打开然后再释放,最后结果相当于没有做任何操作,怎么获取已经打开的这个路径下的资源啊?关键问题应该在这里吧??[/quote] 打开过之后没有其它操作了没?试试使用using语句。[/quote] 没有了,打开之后用工具查看了内存,和关闭之后的内存差不多的。using也是没有效果的。

111,092

社区成员

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

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

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