C#应用程序使用了太多ram
本文关键字:太多 ram 应用程序 | 更新日期: 2023-09-27 18:03:21
stackoverflow。我用C#(一种光线跟踪器(编写了一个应用程序。问题不在于光线跟踪器,而在于光线的使用。随着时间的推移,应用程序不断消耗更多的内存。
在不进行光线追踪的情况下使用内存:从10mb开始,不断上升
光线跟踪时的Ram usege:如果分辨率很大,则开始80mb,然后120mb及以上这个数字高达500mb。
我查看了VS诊断工具,发现应用程序垃圾收集在1分钟内完成了10次gc。当应用程序进行光线跟踪时,这个数字甚至更大。光线跟踪器返回一个巨大的像素阵列。光线跟踪后,我将像素阵列设置为空,但应用程序内存停留在500-600 mb内存的范围内。
有没有收集更多垃圾或释放ram的选项?
编辑这是一个WinForms应用程序,而不是WPF之类的。
我不能确定,因为没有代码,但这听起来像是内存泄漏。请确认没有静态对象引用有问题的对象。要进行验证,请在将对象设置为null后运行GC.Collect((,因为例如,如果它在第2代中,垃圾收集器可能需要一段时间来检查它并回收它的内存。如果在GC.Collect之后,您发现内存没有被回收,那么您很可能在某个地方发生了内存泄漏。如果找不到胭脂参考的位置,可以使用以下工具https://blogs.msdn.microsoft.com/visualstudioalm/2015/04/29/diagnosing-event-handler-leaks-with-the-memory-usage-tool-in-visual-studio-2015/
祝好运
我可以建议您尝试确定是否有任何内存泄漏导致应用程序内存使用量的逐渐增加吗。有很多免费和付费的工具可以用来完成这项任务,还有关于如何使用它们的无尽建议。vs诊断工具能够快照应用程序的内存使用情况,确定应用程序在哪里使用以及存在哪些类类型。VS诊断工具的更多信息和使用示例可在此处找到:https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Visual-Studio-2015-Diagnostic-Tools
进一步帮助:哪些策略和工具对查找.NET中的内存泄漏有用?
在这里和其他平台上搜索".net识别内存泄漏"也会有所帮助。
通常,内存泄漏是由循环引用的错误处理和保留引起的,因此请确定代码中存在循环引用的任何位置。