2012-01-05 107 views
0

我有下面的代碼創建的對象:提高性能

foreach(string s in stringlist){ 
    AUser myuser = new AUser(s, "Employee"); 
    if(myuser.empid != null){ 
    userlist.Add(myuser); 
    } 
} 

上述每個步驟是相當快的,但用戶創造10秒開始服用幾秒鐘。有一個更好的方法嗎?

- 編輯 - 基於所有的答案

,很顯然我應該着眼於構造器。謝謝,因爲這是我正在尋找的。是的 - 在構造器中有很多可以優化的內容......這會花費時間。不知道如何接受評論建議或答案,但這是非常有幫助的。

+0

你是否介紹了它? – 2012-01-05 19:49:36

+0

所有我在VS2010中。沒有其他工具用於性能測試。 – 4thSpace 2012-01-05 19:51:15

+4

我假設'新的AUser()'正在爲一些屬性值爲's'的員工進行數據庫查找?有關此代碼底層內容(尤其是AUser構造函數的內容)的更多信息將提高答案的質量。 – 2012-01-05 19:51:15

回答

2

當您調試時,使用F10跳過代碼,創建需要幾秒鐘運行的對象的東西幾乎不會被察覺。例如,假設它創建了20個對象,需要2秒鐘才能運行。這意味着每個對象需要1/10秒才能創建。按F10時,人類很難注意到1/10秒。您還必須考慮附加調試器的開銷。

嘗試在創建對象之前初始化日期變量,並將其設置爲DateTime.Now。然後在創建諸如DateTime.Now.Subtract(someDate).TotalMilliseconds之類的對象之後打印出經過的時間以查看問題所在。而且,正如@MikeNakis所說,如果userList變量在正常的IList<>之上有任何額外的代碼,那麼您應該進行配置。

還有其他方法可以進行配置,即使內置到框架中,但DateTime方法是查找問題的快捷方式。

編輯:在我看到-1後提出問題,因爲這是一個很好的示例,用於瞭解如何找到性能問題。

+0

+1表示單步執行時性能瓶頸的不可感知性。 – 2012-01-05 21:06:48

+0

是的,好點。我還會推薦[System.Diagnostics中的'Stopwatch'](http://msdn.microsoft.com/zh-cn/library/system。diagnostics.stopwatch.aspx)作爲'DateTime'的替代方案。 – 2012-01-05 21:17:38