.net GC.对方付费电话和OutOfMemory

.net GC.对方付费电话和OutOfMemory,.net,garbage-collection,out-of-memory,.net,Garbage Collection,Out Of Memory,当我打电话给GC的时候,收集所有的资料。但如果我评论这个电话,我会不时收到OutOfMemory。看起来很奇怪。 如何找到这个bug 附加信息 Application sulution有一些项目引用了从2.0到4.0的不同框架 应用程序是windows窗体应用程序,使用的是DevXPress。您可能忘记处理对象。您是否使用任何数据库或其他外部资源?如果您必须调用GC.Collect,则会出现问题。您通常不需要调用垃圾收集器 试试内存分析器。这将向您显示有多少种类型的对象使用您的堆。 检查您的非托

当我打电话给GC的时候,收集所有的资料。但如果我评论这个电话,我会不时收到OutOfMemory。看起来很奇怪。 如何找到这个bug

附加信息 Application sulution有一些项目引用了从2.0到4.0的不同框架
应用程序是windows窗体应用程序,使用的是DevXPress。

您可能忘记处理对象。您是否使用任何数据库或其他外部资源?

如果您必须调用GC.Collect,则会出现问题。您通常不需要调用垃圾收集器

试试内存分析器。这将向您显示有多少种类型的对象使用您的堆。 检查您的非托管资源。每个非托管资源都必须由实现IDisTable的类与终结器一起管理。
在.net中调试内存泄漏的一种常见方法是使用扩展名-您会发现一些教程,比如如果您进行一些研究,或者使用内存分析器,比如一个。也许您只是忘记了释放和处置一些非托管资源?

我会尝试用调试托管内存问题


另外,你为什么要打电话给GC。请自便?这通常是一种反模式。

最可能的变体:

大型对象堆碎片。在应用程序中使用了大量的大集合,大小可达百万个元素,如HashSet、Dictionary等。所有这些集合都调用Array。可随时调整大小。因此,GC.Collect并没有解决这个问题,只是减慢了碎片化的速度。 非托管代码 编辑:
3.在某些情况下,绘图倾向于抛出OOM异常

不,我不这样认为。引发异常的地方与devexpress和System.Drawing有关,这是您经常使用新内存的地方,而不是分配新内存和不释放内存的地方。Dev express可能不是导致内存问题的原因。我在这里分配了很多纯clr对象,OOM通常会在任何ctor上抛出。有关代码的更多信息将非常有用,我想也许你应该告诉我们异常是在哪里抛出的…通常异常是在new+ctor调用时抛出的。我恐怕无法本地化该位置,因此我无法显示代码,因为它大约有50MB的sizeDamn,profiler挂在这个项目上是的,我知道,有些问题,但是profiler如何帮助我?有数百万种不同类型的对象:-好吧,这就是为什么你必须给我们一个分析器。探查器的工作是使这些对象对您来说是可解释的。我不使用任何带有非托管资源的自制类。我所拥有的只是Devexpress,纯clr对象和系统。绘图是的,我同意。因此,我提出了以下问题:-