我在 C# .NET 应用程序运行时向 Windows 窗体添加控件。这些控件中的每一个都与特定信号交互,并使用该信号中的一些数据——信号名称、描述、来源、单位、值等。
这些控件上有一个复选框。当其中一个信号的复选框的 Visible 属性变为 true 时,我的应用程序的提交内存就会跃升至 800MB 以上。其他数百个信号都没有问题。
我使用 DebugDiag 工具了解到 comctl32.dll 正在分配 805.45 MB。尤其:
- 函数 comctl32_72380000!CCHeapAllocArraySize+3a
- 分配类型 堆分配
- 堆句柄0xf37893cd
- 分配计数 1 个分配
- 分配大小 803.20 MB
- 泄漏概率 16%
接下来的故障排除步骤应该是什么?什么工具可以提供帮助?
Update:我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹条最大超过2亿。当我将最大值减少到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右可以使用更合理的内存量。
我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹条最大超过2亿。当我将最大值减少到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右可以使用更合理的内存量。
复选框。可见让我很失望。似乎应用程序在 checkbox.Visible 变为 true 时正在为其创建控件和内存,但复选框本身与问题无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)