2011-03-15 19 views
2

我不知道是否有做以下VS使用普通的舊ado.net的DataReader和DataTable時的性能損失:實體框架運行存儲過程和本地的查詢性能方面的考慮

using(DBEntities dbEntities = new dbEntities) 
{ 
    ObjectResult<tblCustomers> customers = 
     dbEntities.ExecuteStoreQuery<tblCustomers>("SELECT name,id FROM tblCustomers"); 
} 

我也想運行存儲過程使用dbEntity。

我提到這是因爲我正在開發一個高性能的敏感應用程序,但仍然希望使用實體框架。

此外,任何人都可以指向我最近的性能測試的LINQ實體編譯查詢在.NET 4.0?

編輯
如果我ado.net我計劃將結果我從每行手動得到一個.NET對象去。所以它是實體框架storequery/sproc vs ado.net +手動創建數據並將其插入.net對象。

回答

2

是的,當然 - 這是比普通的ADO.NET/SQL更高級的方法。

您發送SQL查詢並獲取tblCustomers對象的列表。在行的某處,從數據庫的行/列到對象的映射將會發生,這需要一些時間。另一方面 - 如果你想自己做同樣的事情,你也必須支付性能損失 - 或者你只是使用舊式的行/列來完成你的工作(而不是建議使用)。 !)。

這是經典的「便捷與性能」折衷 - 對您而言哪些更重要?能夠用良好的C#對象及其屬性進行編程,並且作爲程序員非常高效 - 或者從數據庫中選擇幾納秒的SELECT語句?這是你的選擇......

+0

我當然計劃將結果插入到一個對象,如果我去ado.net,也許我不夠清楚,我的意思是運行查詢本身的性能損失,而不是把它轉換成一個對象所花費的時間(如你所提到的那樣真的可以忽略不計)。 – dortzur 2011-03-15 13:07:14

+0

@dortzur:我沒有任何數字可以支持這一點,但你可以假設微軟會盡其所能地儘快完成這些任務 - 通常,「自己動手」幾乎無法更快速地工作 - 除非您可以利用關於通用方法不可能具有的系統的一些信息。 – 2011-03-15 13:09:19

+0

@dortzur:我很確定這個代碼也使用ADO.NET連接和一個'DataReader'來獲取它的數據 - 實際上並沒有那麼快...... – 2011-03-15 13:10:03