2014-01-16 45 views
-1

你好,我有一個相當簡單的問題,我有一個多線程的應用程序,用於執行一些週期性的網絡更新 我有一個表單說mainForm和一個CustomuserControl現在在我們的mainForm上顯示網絡更新,我們有一個按鈕,在這個按鈕上點擊我們可以添加儘可能多的CustomUSerControls,但是它消耗了太多的內存和CPU使用量,當我通過性能分析器看到包含在視覺工作室它告訴我,WINDOWSFORMAPPLICATIONBASE.RUN(STRING())佔用太多的CPU使用

MICROSOFT.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(string()) 

這種方法是採取cpu使用近70-80我不知道它是什麼花費太多的內存可以任何人解釋它請

回答

1

你的UI代碼中有一個循環,它不斷地執行某些操作並使用CPU。

檢查任何查詢你正在做的,要麼放暫停在投票站或將其更改爲一個基於事件的系統,只有當你的類接收的信號,有可用於處理信息的處理信息。

如果你已經聽事件,但該事件被解僱非常頻繁,你可能需要找到一個方法來降低被解僱事件的數量或僅足夠的時間過去之後處理該事件處理程序。

可惜我不能得到任何比這更具體的,沒有看到導致該緩慢在你的代碼確切的代碼。我建議使用代碼分析器來查找代碼的哪一行(您向我們展示的代碼是.NET框架代碼,用這些代碼可以做的事情不多)被稱爲最多,並計算出如何優化它們。

+0

好的,謝謝您的時間和寶貴的答案,我必須不斷地檢查網絡的更新和我不能等待的信號,因爲一些要求,也是你對我有一個代表它設置一些文字性和節省一些info,所以問題在於上述方法中的問題不在其他地方 –

1

首先,你可以嘗試使用 變種P = System.Diagnostics.Process.Start(...)

(您可以等到用對進程終止)

後面的代碼更簡單,比你所描述的方法更快。

另一種選擇,如果你的自動啓動網絡應用也是一個.NET應用程序,你有它的來源:

1)分成兩個部分的網絡應用:加載程序(.exe文件)和移動在.dll文件中添加網絡更新方法(將庫項目添加到您的解決方案並將更新方法使用的源文件移動到此新庫項目中)。

2)在網絡應用程序加載器和表單應用程序中添加對庫項目的引用。

3)從窗體應用程序:不啓動網絡應用程序加載器,而是直接調用的庫項目的網絡更新方法。

有了這個第二方法中,形式應用僅具有加載DLL(比開始每次需要網絡更新時間的新的應用程序更快速)。