2009-05-22 72 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都相同。

相关问题