2014-04-03 75 views
0

我們有一個非常複雜的軟件,主要是用C#中的.NET WinForms編寫的。許多人爲此做出了貢獻。其中一項貢獻是增加了一個在Win Forms中託管的控制檯Windows Presentation Foundation (WPF)。所述控制被認爲是一種通用控制,並在應用中的許多地方使用。WinForms中承載的與WPF控件相關的性能問題

一切都很好,直到幾天前,當我們開始看到在啓動應用程序的過度延遲。該應用程序用於在不到5分鐘內啓動,但現在需要20分鐘才能啓動。

我們一直在分析這種情況,但發現很難確定真正的問題。我們已經看到,我們是在多個地方使用行爲不端的共同控制,最終調用下面的框架功能:

enter image description here

在畫面上方顯示由系統功能來履行職責所需要的時間。每次公共控制初始化時,系統功能大約需要1.5分鐘。我們在我們的應用程序中至少使用共同的控制8次。所以,總共12分鐘。

是否有其他人看到過用WinForms託管的WPF控件的這類問題? 任何幫助,將不勝感激。

編輯:

沒有與我們使用C#字典的問題。通過使用列表清除它解決了延遲問題。微軟在他們的最後轉載了這個問題。他們正在努力。 也許,我們的應用程序把C#字典帶到邊緣;)

謝謝大家提供您的輸入。

+2

你可以發佈你的WPF控件的代碼嗎? XAML /代碼在後面。 – BenjaminPaul

回答

0

這很可能是WPF控件的初始化,而不是ElementHost或它在WinForms中託管的事實。

沒有看到WPF UserControl的代碼,它很難告訴你可能是什麼,但我會說WPF/WinForms的互操作性肯定是一個紅鯡魚。

+0

我現在無法訪問代碼。但我會盡快發佈。 – msiyer

0

您可以嘗試使用Ngen

The Native Image Generator (Ngen.exe)是一種工具,提高了管理的應用程序的性能。 Ngen.exe創建本地映像,這些映像是包含編譯的特定於處理器的機器代碼的文件,並將它們安裝到本地計算機上的本機映像緩存中。運行時可以使用緩存中的本地映像,而不是使用just-in-time (JIT) compiler來編譯原始程序集。

如果項目的組件將與Ngen幫助下進行編譯,則無需啓動應用程序和使用組件的負荷元數據之前每次運行時JIT編譯器。

Ngen將查找主要程序集的所有靜態依賴關係,並將它們全部編譯爲低級圖像。這些圖像將存儲在程序集緩存(GAC)中,因此可以減少應用程序加載時間。