2013-03-04 44 views
2

我有一個包含System.Windows.Forms.TrackBar的控件。我將其最大值設置爲〜200,000,000。當我這樣做時,控制需要800MB的內存。將最大值減少到2,000,000使用更合理的內存量。System.Windows.Forms.TrackBar內存使用具有很大的最大值

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

這是Windows控件中的錯誤嗎?或者我要求trackbar做一些不合理的事情?

更新: 我創建了一個新窗體項目,只有窗體上有一個軌跡條。我將最大值設置爲200,000,000。我設置TickFrequency並進行更改,以便不存在數百萬個滴答和更改步驟。

當我這樣做時,應用程序使用超過800MB的內存。我正在使用.NET Framework 4.

trackbar max set to 200,000,000, using > 800MB memory

更新 我有點找到的解釋這個問題: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

+0

你是怎麼確定它使用大量內存的? – 2013-03-04 19:45:16

+0

@ImmortalBlue:請參閱[本文](http://stackoverflow.com/questions/15206654/excessive-memory-usage-by-comctl32-dl​​l-when-a-checkbox-controls-visible-becomes) As far將其縮小到TrackBar,我將跟蹤欄的最大值更改爲1000000,並使用資源監視器工具查看提交內存。我想我應該確保問題不是其他的使用最大值的東西。 – GreenRibbon 2013-03-04 19:55:55

+0

那麼,我剛剛做了一個noddy複製,並且最大尺寸對我的應用程序沒有任何影響。我懷疑它實際上是使用那麼多內存的trackbar。您是否將某些內容綁定到了trackbar的最大值? – 2013-03-04 20:02:12

回答

4

這是Windows控件中的錯誤?

是的,我認爲你可以稱之爲一個錯誤。在64位操作系統上特別討厭,平臺目標設置爲AnyCPU,因此沒有合理的內存分配上限。我的機器完全死於鼠標交換死亡,Ctrl + Alt + Del無響應,我用硬啓動將其恢復。謝謝。

實際上有兩個錯誤。它從原生軌跡欄控件開始,沒有將合理的上限限制在滴答數量上。通過按照正確的順序分配屬性,您可以在設計模式中生存下來。但它由於TrackBar類包裝中的缺陷而複雜化,它在運行時初始化本機控件時,會在TickFrequency屬性之前分配Maximum屬性。所以在短暫的時間內,它仍然有一個巨大的蜱蟲。呃,當它有20億的時候,它不是簡單的,就像我不知情的嘗試。

沒有簡單的解決方法,這個錯誤不會得到修復。使用合理的值,你總是可以通過乘法來映射它們。