GC.Collect 调用和 OutOfMemory
当我调用 GC.Collect 时一切正常。但如果我评论这个调用,我时不时会收到 OutOfMemory 消息。看起来很奇怪。 如何找到这个bug?
附加信息 应用程序解决方案有一些项目引用了从2.0到4.0的不同框架 Aplication是一个windows窗体应用程序,使用的是devexpress。
When I call GC.Collect all works fine. But if I comment this call, I time from time receive OutOfMemory. Looks very strange.
How to find this bug ?
Additional info
Application sulution has some projects that have references to different frameworks from 2.0 to 4.0
Aplication is a windows forms application, devexpress is used.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
最可能的变体:
编辑:
3. System.Drawing在某些情况下容易抛出OOM异常
The most likely variants:
Edited:
3. System.Drawing tends to throw OOM exception in some cases
您可能忘记处理某个物体。您使用任何数据库或其他外部资源吗?
You probably forget to dispose an object. Do you use any databases or other external resources?
如果您必须调用 GC.Collect,那么就有问题了。您通常不需要调用垃圾收集器。
If you have to call GC.Collect then something is wrong. You usually should not need to call the garbage collector.
在 .net 中调试内存泄漏的常见方法是使用 SOS -扩展(你会发现一些教程,例如这个(如果您做了一些研究)或使用内存分析器,例如 这个。也许您只是忘记释放(处置)一些非托管资源?
A common approach to debug memory leaks in .net is to use the SOS-Extension (you'll find some tutorials like this if you do some research) or to use a memory profiler, like this one. Maby you just forget to release (dispose) some unmanaged ressources?
我会尝试使用 CLR 分析器 调试托管内存问题。
另外,你为什么自己调用 GC.Collect() ?这通常是一种反模式。
I would try debugging managed memory issues with the CLR profiler.
Additionally, why are you calling GC.Collect() yourself? This is usually an anti-pattern.