簡體   English   中英

Windows處理問題

[英]Windows Handle Issue

面對一個問題,即在Windows應用程序中,用戶對象超過10000,應用程序崩潰。

經過大量分析,我們意識到我們需要擺脫用於對齊控件的面板,並可能減少用戶對象達到10000個的可能性。

我們的應用程序用戶界面由配置驅動動態生成,並且可能會有所不同。 因此,所有UI生成都是動態發生的。

任何幫助將非常感激

這是毫無根據的建議,但請記住要確保不需要的Controls始終將其自身與訂閱的事件分離。 仍在訂閱“活動”(正確的術語是什么)對象的事件的Control無法清除。

值得一提的是,Chrome開發團隊也遇到了這個問題,當達到某些內部gdi限制時,滾動條箭頭(除其他外)不再繪制。 在足夠復雜的gdi應用中,很可能達到此限制。

您可能需要做一些研究,看看他們是如何解決的。

作為替代方案,您可以考慮使用其他平台,gtk或wpf都可以,並且它們不使用gdi手柄繪制。

這里

如果您的程序運行haywire,您會發現它可以創建約10,000個窗口管理器對象,然后系統將不再允許它。 為什么要停止在10,000?

第一個答案是“如果必須提出要求,則可能是您做錯了什么。” 首先,程序不應在接近一萬個窗口管理器對象的位置創建。

不需要那么多的句柄。 我認為您需要一個新的解決方案。

我是從您的問題中猜測出來的,但是您可能會將大量控件放在可滾動面板或帶有多個標簽頁的標簽控件上,這意味着實際上這些控件中的大多數控件實際上都不是用戶可見的給定的時間點(因為它們不可能一次全部可見)。

如果在滾動面板上具有所有這些控件,則一種可能的解決方案是僅在用戶在面板中滾動時加載並顯示可見部分上的控件。 當用戶滾動時,您將卸載並處理不再可見的控件。

如果將所有這些控件都包含在一個多頁選項卡控件中,則可以使用類似的策略,僅在該頁面顯示為可見時才將其加載到該選項卡頁面上(並從上一個最上面的選項卡頁面中卸載控件。同一時間)。

另一個通用策略是將一個怪獸形式分解為大量UserControl,並且一次僅顯示其中一個UserControl。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM