2011-09-01 103 views
2

我有我的數據層GetCompany的靜態方法。我這樣做是因爲我需要一個公司對象與財產進行比較。問題是下面的代碼應該我做另一個對象並分配返回的公司對象,或者只是在條件中使用它。性能問題:實體框架

,它是根據性能的最佳方式。

if (property != null && property.CompanyNum > 0) 
{ 
    if (property is PersonalDetail && 
     (Property.GetCompany(property.CompanyNum)). 
      CompanyType.ToUpper() != "COI") 
    { 
     if (property.TaxSubTypeId != 19) 
     { 
      if (property.CompanyNum == 81 && property.TaxSubTypeId == 11) 
      { 
       // Tax Sub Type of Compressor & Company Name 
       // Midcon Compression LLC 
       SetPersonalNonCOI81Inputs(); 
      } 
     } 
    } 
} 

我在下面有很多條件,所以我只是提到他們中的幾個,讓我知道我該如何優化它。

+0

有更嚴重的問題,而不是性能。首先衡量業績並找出瓶頸在哪裏。 – Eranga

回答

1

這聽起來像premature optimization的情況下。如果您的GetCompany方法不經常被調用,那麼您無需擔心。

但是,從您的列表中看來,Property.GetCompany調用可能會傳出到數據庫以檢索共同映射信息,因此如果您按用戶請求多次調用此方法,則緩存可能有意義訪問此屬性的代碼中的返回值。

,你可能有另一個問題是,你對SetPersonalNonCOI81Inputs通話可能修改一些全局狀態值,因爲它從你的靜態GetCompany方法調用。這會導致多線程環境中的問題(假設這是一個Web應用程序),因爲您可以對共享狀態值進行併發修改。所以,你可能想要刪除SetPersonalNonCOI81Inputs方法,並簡單地返回一個新的對象。

+0

SetNONCOI81 ...是一種單獨的圖層方法,它不得不做任何事情。但這裏的事情是我只需要一個公司類型來使有效的條件成立。這就是爲什麼我創建該方法只是爲了檢查公司的類型,靜態方法與沒有任何修改無關。 –

+0

在這種情況下,你應該沒有什麼可擔心的。您在此代碼中評估的條件對性能的影響可以忽略不計。 –

+0

@Brett感謝您的幫助 –