C# FileStream 内存没有及时释放问题

for(intj=0;j<100;j++){using(FileStreamfs=newFileStream("D:\\uCacheMemory.tmp",FileMod... for(int j=0;j<100;j++)
{
using (FileStream fs = new FileStream("D:\\uCacheMemory.tmp", FileMode.OpenOrCreate))
{
for(int i=0;i<100;i++)
{
fs.Seek(i * 1000000 + 1, SeekOrigin.Begin);
fs.Write(buff, i * 1000000, 1000000);
}
fs.Flush(true);

fs.Close();

}
}
根据出现的情况,大致模拟了下基本就是上述情况,内存可以释放,但是没有及时释放而是慢慢的释放,也就是说 J 那边一直循环的话内存会一直往上涨,理论上我每次的循环都有释放它,但貌似是filestream自己的缓存导致不会马上释放,有大神知道如何及时释放filestream的内存问题吗》???
问题补充: 经过测试表明,并非简单这样,在主线程中这样做,内存会涨,但涨了一些后就上不去了,这样应该是没有问题的,但是开线程去处理特别是多线程处理就更加了,内存一直涨,直到停下来之后才开始慢慢下降,就是说内存释放太慢跟不上,有时内存还会蹦掉...我那边开的是线程池...所以一直在涨..模拟如下:
展开
 我来答
zljk0306
2013-07-12 · TA获得超过366个赞
知道小有建树答主
回答量:229
采纳率:90%
帮助的人:215万
展开全部
你为什么要将打开文件的操作写在j 循环里面呢?频繁打开关闭当然吃内存了,放在j外面
追问
实际每次打开关闭都有dispose,应该是没有关系的.那么实际上我之前也有想过是不是这个原因也试过把fs定义成全局只开一次...然后不关,结果还是一直涨....
1027781434
2013-07-10
知道答主
回答量:38
采纳率:0%
帮助的人:11.3万
展开全部
System.GC.Collect();
调用.net内存垃圾回收器,清理filestream内存
追问
这个我也试过,无效,不是说资源释放不了而是说不能马上释放。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清水栞
2013-07-10 · TA获得超过1547个赞
知道小有建树答主
回答量:1538
采纳率:50%
帮助的人:1023万
展开全部
.net的资源施放是一个单独的线程,而且是一个优先级很低的线程,所以在代码很忙的时候,不会去处理这结事情。。。不知道这个是否可以解释你的现象
更多追问追答
追问
有可能是这么一回事,不过印象中GC是空余时间清理,Dispose应该是马上释放啊。。。。
追答
Dispose只是把你的资源扔进一个清空队列,等待施放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangpaishi
2013-07-10 · TA获得超过570个赞
知道小有建树答主
回答量:932
采纳率:52%
帮助的人:794万
展开全部
不知道,呵呵
再来一个明确的 fs.Dispose() 看看
更多追问追答
追问
using(){  }自带用完直接dispose()的
追答
是的,我也是那样认为的
所以说我不知道,还说了个明确
呵呵

你就不应该那样用,想办法把循环放在里面,否则是反复的快速开关文件
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式