2011-08-31 71 views
2

我正在寫WinForms應用程序,到目前爲止它包含37個表單。這是因爲我的項目需要。C#中Win表單的數量限制

我的問題是:

  1. 是否有限制在C#創建表格的數量?
  2. 它對應用程序性能有影響嗎?

感謝您的幫助。

回答

8

C#中的表單創建是否存在限制?

AFAIK有一個由.NET框架強加沒有這樣的限制。很顯然,你創造並保存在記憶中的形式越多,記憶就越少,直到用完爲止。而你擁有的內存越少可能會導致性能下降。

另一方面,如果您只保留當前表單的內存,並讓GC保留其他表單,讓它們的實例不在範圍內,則不會出現此類問題。

+0

所以在這種情況下,我有問題,包括內存,...? – Real2000

+0

@ Real2000,在哪種情況下?如果你把所有的表格都保存在內存中? –

+0

作爲您的想法什麼是實施這項工作的最佳方式?使用TabControl而不是使用多個表單更好嗎? – Real2000

3

表格數量沒有限制,直到您用完ram。它會影響系統和應用程序的性能。

+0

我同意。然而,使用這種形式可能會觸發VS中的錯誤症狀,而這種錯誤症狀可能無法用一種或兩種形式看到。 – TheBlastOne

+0

@TheBlastOne:那麼我們需要更多表單的解決方案是什麼? – Real2000

0

不是我所知道的,或者項目中的其他模塊或類可以創建儘可能多的,而不受任何限制。

問候。

+0

但在另一邊,我們將有記憶力損失! – Real2000

+0

你好,對不起我英文不好,因爲後來我意識到級別的設計師,但是如果你打算在運行時打開幾個,那麼我同意你的意見,當有更多的空閒內存時你在OutOfMemory異常中有錯誤。關於 –

+0

你如果我們一次不打開多個表單,意味着有大量表單(即高達50),我們不會有內存問題? – Real2000

0

我有一個項目中有太多的winforms(約50)。 2或3調試版本和運行後,我以前得到以下錯誤。

Error 1 Unexpected error writing metadata to file 

'E:\庫\項目\ JewelSoft \ PresentationTier \ OBJ \發佈\ PresentationTier.exe' - 「沒有足夠的存儲是可用於完成此操作。 'PresentationTier

所以要小心,始終要實施GC。

更新1: 雖然也有像GC.Collect的()方法,你不經常需要實現它,除非你有你的代碼突然結束或切換線程的情況下。諸如處理關閉之後不需要的表單以及避免對象的重複聲明將有所幫助。

更新2: 瞭解更多關於何時寫GC的信息。收集請參考以下鏈接:

  1. GC.Collect()

  2. When to call GC.Collect

  3. When is it acceptable to call GC.Collect?

而關於形式處置,表格close方法將自動獲得處置,但隨後如果您有其他形式的該表單的變量,則建議編寫form1 = null;form1_disposed事件

+0

你能幫我嗎我如何使用GC?因爲知道這個事實,.NET自動調節GC我還沒有用過GC!謝謝 ! – Real2000

+0

@ Real2000:儘管有像GC.Collect()這樣的方法,但除非有代碼突然終止或切換線程,否則通常不需要實現它。諸如處理關閉後不需要的表單並避免重複聲明對象將是有幫助的 – Marshal

+0

我不明白GC.Collect會提供什麼,因爲如果系統內存不足,則等效項正在運行。如果這沒有釋放足夠的字節,手動GC.collect調用也不會。 – TheBlastOne