【问题标题】:System.Windows.Forms.TrackBar memory use with a large maximum valueSystem.Windows.Forms.TrackBar 内存使用的最大值很大
【发布时间】:2013-03-04 19:40:23
【问题描述】:

我有一个包含 System.Windows.Forms.TrackBar 的控件。我将其最大值设置为~200,000,000。当我这样做时,控件需要 800MB 内存。将最大值减少到 2,000,000 使用的内存量更合理。

//trackBar.Maximum = 210554060;  // uses ~800MB of memory
trackBar.Maximum = 1000000;      // uses a small amount of memory

这是 Windows 控件中的错误吗?还是我要求trackbar做一些不合理的事情?

更新: 我创建了一个新的 Windows 窗体项目,窗体上只有一个轨迹栏。我将最大值设置为 200,000,000。我设置了 TickFrequency 和更改,以便没有数百万个刻度和更改步骤。

当我这样做时,应用程序使用了超过 800MB 的内存。我正在使用 .NET Framework 4。

.

更新 我找到了对此问题的某种解释:http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.windowsforms.controls/2006-12/msg00015.html

添加测试项目的链接 https://www.dropbox.com/s/nh6jsymw05feoqn/testingTrackbar.zip?m

【问题讨论】:

  • 你如何确定它使用了大量的内存?
  • @ImmortalBlue:见this post 至于缩小到TrackBar,我将trackbar 的最大值更改为1000000,并使用资源监视器工具查看提交内存。我想我应该确保问题不是使用该最大值的其他问题。
  • 好吧,我刚刚做了一个点头复制,最大尺寸对我的应用程序没有任何影响。因此,我怀疑它实际上是使用这么多内存的轨迹栏。您是否将某些内容绑定到轨迹栏最大值?
  • @ImmortalBlue 我已经在一个新项目中进行了复制并且得到了相同的结果。查看更新。
  • 你能把项目(带有编译后的 exe)发布到某个地方,看看我们是否可以在另一个设置上重现吗?

标签: c# .net memory max trackbar


【解决方案1】:

这是 Windows 控件中的错误吗?

是的,我认为您可以称其为错误。在平台目标设置为 AnyCPU 的 64 位操作系统上尤其令人讨厌,因此内存分配没有合理的上限。我的机器完全死于鼠标和 Ctrl+Alt+Del 无响应的交换死亡,我硬启动它以使其恢复正常。谢谢。

实际上有两个错误。它从本机轨迹栏控件开始,没有对刻度数设置合理的上限。通过以正确的顺序分配属性,您可以在设计模式下幸存下来。但是由于 TrackBar 类包装器中的一个缺陷,它会在运行时初始化本机控件时将 Maximum 属性 before 分配给 TickFrequency 属性。所以在短时间内它仍然有无数的滴答声。好吧,当它有 20 亿个时,这并不简短,就像我无意中尝试的那样。

没有简单的修复方法,而且这个错误也不会得到修复。使用合理的值,你总是可以通过乘法来映射它们。

【讨论】:

    猜你喜欢
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2010-11-13
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多