热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Windows窗体应用程序内存泄漏.NET-WindowsFormsapplicationmemoryleak.NET

Thereisawinformsapplication,wherecoupleofformsareverycomplicated-usingdatasets,multip

There is a winforms application, where couple of forms are very complicated - using datasets, multiple bindings with grids and comboboxes.. Every time when I open the form, the memory usage grows for about 2-5 MB until I get OutOfMemoryException. I use using statements for every IDisposable (for Forms too), tried to clear all the bindings and unsubscribe my events within Dispose(), nothing changed. If I call GC.Collect() after disposing the form, used memory amount returns in previous state, as it was before opening the form. I have tried some memory profilers, but they did not show anything extraordinary.

有一个winforms应用程序,其中几个表单非常复杂 - 使用数据集,多个绑定与网格和组合框。每次打开表单时,内存使用量增长约2-5 MB,直到我得到OutOfMemoryException。我对每个IDisposable使用using语句(对于Forms也是如此),尝试清除所有绑定并取消订阅Dispose()中的事件,没有任何改变。如果我在处理表单后调用GC.Collect(),则使用的内存量将返回之前的状态,就像打开表单之前一样。我已经尝试了一些内存分析器,但它们没有显示出任何特别的东西。

3 个解决方案

#1


1  

Because the memory grows so rapidly, the problem must be in the Paint method of one of the controls (if you paint/draw the control yourself) or in the auto-update loop of your grids (if you update the data source periodically).

因为内存增长如此之快,问题必须出现在其中一个控件的Paint方法中(如果您自己绘制/绘制控件)或者在网格的自动更新循环中(如果您定期更新数据源)。

  1. Check if you dispose all Brushes, Pens, Font, StringFormats in your paint loop.
  2. 检查是否在绘制循环中处理所有画笔,笔,字体,字符串格式。
  3. Check the update-loop of your data sources. Common errors are SqlCommand and SqlConnections which are not disposed properly.
  4. 检查数据源的更新循环。常见错误是SqlCommand和SqlConnections没有正确处理。

Hope this helps. Without more detailed information about your source-code it's hard to provide any other help.

希望这可以帮助。如果没有关于源代码的更多详细信息,则很难提供任何其他帮助。

#2


1  

It is possible that your DataSet is not released correctly although you dispose it. From MSDN

尽管您处置了DataSet,但可能无法正确释放它。来自MSDN

Note: Classes inherited from DataSet are not finalized by the garbage collector, because the finalizer has been suppressed in DataSet. The derived class can call the ReRegisterForFinalize method in its constructor to allow the class to be finalized by the garbage collector.

注意:从DataSet继承的类未由垃圾收集器完成,因为终结器已在DataSet中被抑制。派生类可以在其构造函数中调用ReRegisterForFinalize方法,以允许类由垃圾收集器完成。

And you should read this question that can be very usefull Should I Dispose() DataSet and DataTable?

你应该阅读这个非常有用的问题我应该Dispose()DataSet和DataTable吗?

#3


1  

My employer, Red Gate Software, makes a .NET memory profiling tool you could use to investigate your problem. It has a 14-day trial which might be long enough to find your leak for free :)

我的雇主Red Gate Software制作了一个.NET内存分析工具,您可以使用它来调查您的问题。它有一个为期14天的试用期,可能足够长,可以免费找到你的泄漏:)

http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/

http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/

There is also 'dotTrace Memory' by jetBRAINS, although I've not tried it.

jetBRAINS也有'dotTrace Memory',虽然我没试过。


推荐阅读
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
u02022042
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有