2010-12-16 75 views
2

我的應用程序有幾個大型窗體,包含大量圖像,大大增加了構建的可執行文件的大小。隨着時間的推移,初創公司的表現似乎變得呆滯,似乎並沒有好轉。WinForms性能問題

如果我把除了主窗體以外的所有窗體都放在單獨的dll中,它是否會減輕啓動過程中對應用程序施加的一些壓力?

我會自己測試一下,但是我有很多表格,除非有人能證實這樣的行爲證明是有用的,我不想這樣做。

回答

1

許多因素都會影響啓動性能。你有沒有使用任何工具來證明它是圖像?

一開始,經過這些提示: http://devcomponents.com/blog/?p=361

,並考慮使用多線程在後臺加載更大的物體。

+0

感謝您的鏈接,非常有用!我還沒有真正使用過任何工具,但我認爲這只是將應用程序加載到內存中的應用程序正在陷入困境。而且我已經對我在啓動時執行的所有功能進行了線程化。它有幫助,但不明顯。 – Eaton 2010-12-16 03:12:30

+0

標記爲答案 - 非常有幫助的鏈接。 – Eaton 2010-12-17 23:49:27

1

我對此不太確定,但如果我是你,我會在提高性能時使用Profiler
在我猜出有什麼問題之前,我會先諮詢它,然後繼續工作,因爲它告訴我哪些方法和類在我的代碼中花費最多。

+0

我使用之前,但大部分的激烈方法調用中我使用的,而不是在我的代碼的第三方的DLL。我無法獲得這些信息的來源。 ) - : – Eaton 2010-12-16 03:12:09

0

我想知道你是否使用MEF和Lazy加載,然後當你真的需要模塊(Form)通過調用.Value實例化。

有一對夫婦的事情,我做含有大量的表單應用程序:

  • 創建用戶界面的.exe:基本上只有我的形式
  • 創建一個後端的.dll:一切做的工作在用戶界面後面。

圖像是否實際包含在.dll中?如果是這樣,我實際上將我的圖像放入與用戶界面分開的.dll文件中。

鑑於圖像是用於工具欄的,我不會將它們作爲資源分割出來。我仍然會堅持我的建議,將其分成多個.dll文件。

+0

通過圖像我真的意味着工具欄圖像等。不是我放入資源的實際圖像。把它們放在一個dll中,並將它們連接到啓動時的相應項目上將會花費很長時間,並且可能會降低性能。通過Image屬性鏈接它們要容易得多。 ( - : – Eaton 2010-12-16 03:16:09

+0

總而言之,我仍然認爲MEF實際上可以幫助加載。 – IAbstract 2010-12-16 04:10:42

1

另一個可能有用的提示:這可以將我的應用程序的啓動時間從2分鐘縮短到< 10秒鐘,在低端瘦客戶端上。使用NGEN生成組件的預編譯本機映像。

+0

有趣的..會在第三方程序集上工作嗎? – Eaton 2010-12-16 03:13:57

+0

是的,這將適用於任何完全管理的程序集。模式程序集,但我從來沒有嘗試過。 – 2010-12-16 03:30:16

0

正如別人所說,簡介,不要猜測。

不只是任何profiler會做。 Here's a user(除我之外)誰發現了他自己的random pausing。 你說「激烈」的方法都是在你沒有源代碼的dll中 - 這是典型的和正常的。 你需要知道的是你的代碼中的哪些語句要求花費時間,並且它們不能僅限於CPU專用時間。 大多數配置文件不會告訴你這一點,但隨機暫停。

如果你有興趣,here's a recent discussion of the issues.