[英]How can I read a CSV file I downloaded from MemoryStream using C# .net?
[英]How can I free up MemoryStream in C#?
我对 C# 有点陌生。 我已经尝试在管理 memory 方面做正确的事情,但我现在遇到了“内存不足”错误。
更新 #2 12 月 5 日
我解决了它,(有点)我不明白为什么,但是当我使用硬编码参数从我的测试应用程序运行代码时,它工作得很好,但是当我使用对话框(基于 OokiDialog)来获取一些参数。 那是 memory 没有释放的时候。
所以,对话框似乎有一些东西让它想要抓住这些对象,即使它们与对话框本身无关。
最后,我能够通过在它自己的任务中运行代码来“修复”问题:
Task taskA = Task.Run(() => MakeFiles(path, name));
taskA.Wait();
它让我再次工作,但我仍然喜欢一些关于为什么会这样的理论?
12 月 5 日更新
经过不断的挣扎,我决定将相关代码复制到一个可以进行实验的测试项目中。 复制后,我运行它,惊讶地发现 memory 在每次迭代时先升后降。 没有更多的“内存不足”!
仍在试图弄清楚如何/为什么。
更新 12 月 4 日
我已经排除了 GIF 编码器。 我注释掉了那部分代码,memory 还是涨涨涨涨。
我正在做很多加载图像并将它们的像素复制到字节[] arrays。 在大多数情况下,我一直非常小心地使用局部变量,所以它们不应该持续存在。
有什么方法可以告诉 object 的 object 或至少 class 正在创建那些“StreamAsIStream [强句柄]”引用吗? 原始问题
我已经对堆进行了一些分析,可以看到主要的罪魁祸首是 MemoryStreams。
我在几个地方使用 MemoryStream,但一直小心使用“使用”:
using (MemoryStream mem = new MemoryStream())
{
...
}
我注意到堆上的大多数流最终显示为:
StreamAsIStream [强句柄]
那个“强大的手柄”似乎是一个线索,也许? 即因为它是一个强大的句柄,GC 不会清理它?
我已经尝试明确处理流,然后强制垃圾 collections,但无论我做什么,他们似乎只是坚持下去,最终我得到 memory 错误。
可能是其他东西在内部使用 MemoryStream 并且我在错误的地方寻找吗?
有什么想法或其他我可以看的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.