2009-05-22 33 views
19

我正在與另一位與我合作的程序員進行辯論。DataTables vs IEnumerable <T>

對於數據庫返回類型,是否有任何顯著內存使用或性能上的差異,還是應該讓別人避免使用的數據集,數據表和實施有利於IEnumerable<T>類型...反之亦然

我其他的利弊更喜歡返回實現IEnumerable<T>List<T>, T[] etc)的類型,因爲它更輕量級,在訪問屬性時強類型化爲對象,允許更豐富的底層類型等信息。手動使用數據讀取器時,它們需要更多時間進行設置。

就是用這些數據表每天只lazyness的唯一原因?

+0

平臺/語言?我想這個DataTable是一個特定於平臺的結構;但擺明可以更容易地回答 – Javier 2009-05-22 03:29:47

+0

當然,該平臺是.NET Framework(C#或VB)2.0+ – CRice 2009-05-22 03:32:55

回答

18

數據表肯定比列表重得多,無論是在內存的需求,並且在處理器時間花在他們創造/填充起來。
使用DataReader比使用DataTables(我假設您使用DataAdapter來填充它們)快得多(儘管比較冗長)。

也就是說...... 除非這是在一些地方,它真的事項,你可能罰款無論哪種方式,而這兩種方法將是速度不夠快,所以只是去與任何在每種情況下更舒適。 (有時候你想用很少的代碼來填充它們,有時候你想用很少的代碼來讀取它們)

我自己傾向於只在綁定到GridView時使用DataTables,或者當我需要多個結果集時同時活躍。

6

使用數據表直接裝置捆紮自己基礎數據源以及它是如何佈置。從可維護性的角度來看,這並不好。如果您的所有視圖都需要列出一些對象,那麼這就是您應該給予的。

9

另一個優點使用類System.Collections中是你得到更好的排序和搜索選項。我不知道有什麼合理的方法來改變DataTable排序或搜索的方式;使用集合類,您只需讓您的類實現IComparable或IEquatable,並且您可以完全自定義List.Sort和List.Contains的工作方式。

你不必擔心的DBNull,這已經絆倒了我在不止一個場合,因爲我期待空,並獲得DBNull的名單

也。

8

我也喜歡IEnumerable<T>的事實,您可以使用方法和屬性來增強集合的基礎類型,這些方法和屬性使實現更加優雅,代碼更易於維護。例如FullName屬性。如果超出了你的控制範圍,你也可以向該類添加擴展方法。

public class SomeUser 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } } 
} 
0

我發現與大表通過SQL,數據表是快得多,而不是IEnumerable。我在一張HTML頁面中放置了一張26行,25列的表格。在3秒內Datatable,IEnumerable耗時9秒。我投票DataTable。除類型外,所有codewad都相同。

相關問題