c# - 当复选框控件的 Visible 变为 true 时,comctl32.dll 使用过多的内存

标签 c# .net memory comctl32

我在 C# .NET 应用程序的运行时向 Windows 窗体添加控件。这些控件中的每一个都与特定信号交互并使用来自该信号的一些数据——信号名称、描述、来源、单位、值等。

这些控件上有一个复选框。当这些信号之一的复选框的 Visible 属性变为真时,我的应用程序的 Committed 内存就会跃过 800MB。其他数百个信号都没有问题。

我使用 DebugDiag 工具了解到 comctl32.dll 正在分配 805.45 MBytes。特别是:

  • 函数 comctl32_72380000!CCHeapAllocArraySize+3a
  • 分配类型堆分配
  • 堆句柄0xf37893cd
  • 分配计数 1 个分配
  • 分配大小 803.20 MB
  • 泄漏概率 16%

接下来的故障排除步骤应该是什么?哪些工具可以提供帮助?

更新: 我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹栏最高超过两亿。当我将最大值减少到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右会使用更合理的内存量。

最佳答案

我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹栏最高超过两亿。当我将最大值减少到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右会使用更合理的内存量。

checkbox.Visible 让我失望了。看起来应用程序正在为复选框创建控件和内存。Visible 变为 true,但复选框本身与问题无关。

关于c# - 当复选框控件的 Visible 变为 true 时,comctl32.dll 使用过多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15206654/

相关文章:

c# - Identity Server v3 自定义页面重置密码

c# - .net 图表控件 : retain series colors when adding and removing other series?

c# - 使用 .net c# 在 Windows 窗体应用程序中验证印度电话号码?

php - Redis + phpredis 丢失 key ——内存溢出?

c# - 如何防止将 Item 添加到 DataGrid?

c# - Blazor 添加 HttpClientHandler 以将 Jwt 添加到请求的 HTTP header

c# - 在 C# WPF 中使用 Datacontext 填充数据网格

C#-为什么此 if 语句会删除 StreamReader 输出上的换行符?

java - 从 HashMap 中删除未使用的分配内存

c - 内存到内存传输优化,如何不memcpy?