2015-10-27 165 views
0

我從我的數據庫查詢併爲表中的每一行執行以下功能。我有大約400,000行。DateTimeOffset.Parse的性能下降嗎?

當我使用VS內置工具分析性能時,似乎DateTimeOffset.Parse花費了大量時間。具有不同類型的其他屬性(例如string,int,bool)所需的數量要少得多。

有沒有一種方法來優化DateTimeOffset.Parse的性能?

private MyItem GetMyItemData() 
    { 
     var entity = new MyItem(); 

     //**** Lots of setting other entity properties**** 

     entity.ActiveDate = 
      string.IsNullOrEmpty(this.DataManager.Reader["ActiveDate"].ToString()) ? 
      DateTimeOffset.MinValue : DateTimeOffset.Parse(this.DataManager.Reader["ActiveDate"].ToString()); 


     return entity; 
    } 

謝謝!

+0

什麼格式是'源ActiveDate'場?您正在轉換爲字符串,然後轉換爲DateTimeOffset ...是否有更好的轉換選項,更直接?例如,如果該字段是'DateTime'(您可以使用'DateTime'進行測試,那麼直接將其轉換爲'DateTimeOffset'比轉換爲字符串並返回要快得多。 – Corey

+0

感謝Corey,我認爲轉換選項由同伴提供最好。 – Water

回答

1

如果您知道傳入字符串的格式,TryParseExact可能會爲您提供更好的性能。

不同功能的比較:DateTime parsing performance

你應該寫一些測試你的自我驗證這一點對於的DateTimeOffset。

你兩次這樣做,這是一個大的數據結構也許昂貴:

this.DataManager.Reader["ActiveDate"].ToString() 

rewite它:

string activedatestr = this.DataManager.Reader["ActiveDate"].ToString(); 
entity.ActiveDate = 
     string.IsNullOrEmpty(activedatestr) ? 
     DateTimeOffset.MinValue : DateTimeOffset.**Parse**(activedatestr); 
+0

感謝同行,TryParseExact幫助減少了時間。 – Water