byte[] bData = System.IO.file.ReadAllBytes( "F:\application_exit_bw.png" );using( System.IO.MemoryStream hMemoryStreamOutput = new System.IO.MemoryStream()){ for ( int i = 0; i < 10000; i++ ) hMemoryStreamOutput.Write( bData,bData.Length );}Thread.Sleep(Timeout.Infinite);
通过显式关闭/ dipose,行为保持不变.内存被占用并将保持这种状态,直到我关闭我的应用程序,或者,应用程序填满了所有系统内存.救命?
解决方法 问题的另一方面是您用来确定“内存泄漏”的内容.有许多不同的方法来衡量“免费”记忆,依赖于它你可能得到完全不同的结果.>内存使用情况显示在任务管理器中 – 由于GC使用内存的方式,即使CLR GC认为所有内存都“空闲”,也不会发生故障.
> GC内存性能计数器(和属性) – 这些实际上将显示GC对内存的看法.您希望使用它们来检测托管内存泄漏.
MemoryStream(以及任何其他大型86K)分配还有一件事 – 它们使用仅在完整GC上收集的大对象堆,触发它可能需要运行GC.Collect两次.在应用程序的正常流程中,它将足够重复,因此您可能无法在应用程序关闭之前释放此内存.诊断 – 检查GC收集性能计数器(GC的数量).
还有一个:如果你正在尝试解决内存泄漏问题,因为你遇到“内存不足”异常,可能是由地址空间碎片引起的(通常只有32位进程).如果是这种情况 – 考虑创建自己的内存流,不在单个块中分配内存,然后在增长流时必须复制它.或者至少尝试预先分配流中的空间.
总结以上是内存溢出为你收集整理的C#MemoryStream泄漏内存后,处理/关闭/ etc?全部内容,希望文章能够帮你解决C#MemoryStream泄漏内存后,处理/关闭/ etc?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)