c# 如何临时保存一个内容比较大的byte[]

乔尼风雪 2017-08-08 09:44:15
private List<byte[]> List = new List<byte[]>(1);


FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
fileStream.Seek(0, SeekOrigin.Begin);
//创建文件长度缓冲区
byte[] bytes = new byte[fileStream.Length];
//读取文件
fileStream.Read(bytes, 0, (int)fileStream.Length);

//释放文件读取流
fileStream.Close();
fileStream.Dispose();


List .Add(bytes);

然后我调用取list集合中的内容,之后再调用清空
lsit.Clear();

但是我每次add内存都会增加,没有释放,请问怎么做?
...全文
813 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyinshengNo1 2017-08-08
  • 打赏
  • 举报
回复
可不可以先把这个byte[] 保存到数据库?用完了在删掉?
xdashewan 2017-08-08
  • 打赏
  • 举报
回复
引用 5 楼 bubai1234 的回复:
有没有可以立即释放内存的
没有,GC的机制就是如此。你的内存很紧张吗?如果真紧张你可以尝试用api限制程序使用内存大小,如果不紧张,那你只要确保程序正确,内存增长到一定数值会下降的
乔尼风雪 2017-08-08
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
[quote=引用 2 楼 bubai1234 的回复:] 但是就是没有释放,内存在不断增加
测试时间长一些,释放并不是你代码执行了就马上有效果的,就如我说的,GC会在“适当”的时候释放资源[/quote] 有没有可以立即释放内存的
乔尼风雪 2017-08-08
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
[quote=引用 2 楼 bubai1234 的回复:] 但是就是没有释放,内存在不断增加
测试时间长一些,释放并不是你代码执行了就马上有效果的,就如我说的,GC会在“适当”的时候释放资源[/quote] 循环1000次,内存增长了1个G,放了一晚上,内存一点都没有消减
xdashewan 2017-08-08
  • 打赏
  • 举报
回复
引用 2 楼 bubai1234 的回复:
但是就是没有释放,内存在不断增加
测试时间长一些,释放并不是你代码执行了就马上有效果的,就如我说的,GC会在“适当”的时候释放资源
乔尼风雪 2017-08-08
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
如果你已经执行了lsit.Clear(),那么GC会在适当的时候释放资源的
但是就是没有释放,内存在不断增加
xdashewan 2017-08-08
  • 打赏
  • 举报
回复
如果你已经执行了lsit.Clear(),那么GC会在适当的时候释放资源的
xdashewan 2017-08-08
  • 打赏
  • 举报
回复
我用如下死循环,能观测到内存的上下波动
byte[] tst;
            List<byte[]> lst = new List<byte[]>();
            int i = 0;
            while (true)
            {
                tst = new byte[1048576];
                lst.Add(tst);
                i++;
                if (i == 1000)
                {
                    lst.Clear();
                    i = 0;
                }
            }
  • 打赏
  • 举报
回复
所谓“临时保存”,我的理解就是你这个 List 所在的宿主是临时的,或者(既然你硬要把它声明为对象范畴而非过程内部的)变量很快就执行
List = null;
你调用它的 Clear 方法算什么“释放”啊?
  • 打赏
  • 举报
回复
引用 4 楼 bubai1234 的回复:
,放了一晚上,内存一点都没有消减
既让能放一晚上,那么你为什么不直接释放 private List<byte[]> List 所宿主的对象实例?!
by_封爱 2017-08-08
  • 打赏
  • 举报
回复
释放不了.. 我以前发过帖子专门讨论过这个. 也是没得到解决...什么remove clear 甚至new list<byte[]> 都没用.... 我相信肯定有人会写什么GC.Collect() 之类的代码.. 告诉你 没用...
乔尼风雪 2017-08-08
  • 打赏
  • 举报
回复
引用 7 楼 zhuyinshengNo1 的回复:
可不可以先把这个byte[] 保存到数据库?用完了在删掉?
没有数据库

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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