返回首页

大家好,

我这里有一个疑问。我的应用程序建立在C#的WinForms在多线程应用程序。最近的长远来说,我的申请后,我面临着"走出内存异常"从一个活跃的窗口和主张。可能是什么原因?在这里,我使用PInvoke调用
。它会导致问题吗?是GC将不工作的PIO电话吗?请建议。

回答

评论会员:游客 时间:2012/02/06
SAKryukov下的GC工作正常,但这个问题已无关的问题你觉得用GC你没有内存泄漏?如果是这样,这是完全错误的。当然,它消除了内存泄漏,你会由于忘记释放一些内存,但它不能帮助,如果你有错误的设计。它很容易设计代码泄漏管理内存。忘记释放一些资源,这仍然是一个内存泄漏的另一种来源,非托管资源。特别是,你需要保证你正确地调用Dispose所有实施System.IDisposable的类型,因为许多这样的对象分配的非托管资源和自由他们只有当你调用Dispose。这是他的解决方案中提到的可能性迈赫迪。使用using语句(不被混合使用条款)。当然,你可以设计有内存泄漏。一个典型的例子是把一些应用全球征集的对象(例如)为了快速搜索,并忘记删除对象时不再使用。顺便说一下,有关使用System.WeakReference的认为,看到imgsrc=因此,首先要分析您的设计,所有对象的生命周期管理。记住一个对象定的GC销毁,只有当它在整个应用程序域的所有引用变得完全无法访问的形式工作代码,但它并不适用于弱引用。这种机制如果很狡猾:如果你已经分离出循环引用路径,GC是足够聪明,安排销毁所有涉及的对象。考虑一个引用B,乙引用C和ç引用A.如果这三个对象的所有其他引用都将丢失,他们将被销毁计划的GC反正。[编辑]销毁的标准是可达性,看到{A}][完编辑]整齐漂亮,是不是?之后,你可能需要使用迈赫迪了很好的意见和使用内存分析器。一个很好的内存分析器是一个相当强大的武器。mdash;SA
梅迪吴拉姆:最好的办法是使用内存分析器(展鹏具有良好的),看到你的内存泄漏,这是很难说什么,它可能是从你的描述

pinvokes可能导致如果不妥善处置,B Birajdar
评论会员:游客 时间:2012/02/06
代码的最佳方式,而对多线程应用程序的工作是,附上您的代码块'使用'。ofcourse这是不是最好的或防呆的方法,但将避免内存的最相关的问题。建议,如果在您的案件告诉我们