数据访问层性能问题,在查询数据库的时候,直接返回DataTable好,还是返回SqlDataReader把数据存到List<T>中好些!别外,DataView的RowFilter,和 用Linq筛选List<T> 那个性能好些。请各位给些建议,或者讨论一下也好。谢谢!

解决方案 »

  1.   

    只有DataSet跟DataReader的区别,一个是断开的,一个是连接的。DataView的RowFilter和Linq筛选List <T>是两个不一样的东西吧
      

  2.   

    不知道,目前一直用DataReader这种方式。
      

  3.   

    如果你的数据读取的时候,只有一页的数据,几十条
    DataTable,DataReader,List<T>都没有太大的性能问题唯一不同的是对象化填充和数据集填充,以及取完数据后,是否对象操作数据可以参考fortunbase中的ODRM
    参考www.cnblogs.com/mail-ricklee
      

  4.   

    DataReader是你取一条的时候才从数据库读一条,数据库记录了你读的指针。而DataSet是数据库一下子把数据读出返回到客户端给你。
      

  5.   

    MS的建议:
    选择 SqlDataReader 还是 DataSet/DataTable,从根本上说是一个注重性能还是注重功能的问题。SqlDataReader 可提供最佳性能;DataSet 可提供额外的功能和灵活性。在下列情况下,请使用由 SqlDataAdapter 对象填充的 DataSet: 
    • 您需要不连续的内存驻留型数据缓存,以便可以将其传递给应用程序内的其他组件或层。 
    • 您需要数据在内存中的关系视图,以便进行 XML 或非 XML 操作。 
    • 您要处理从多个数据源(如多个数据库、表或文件)中检索到的数据。 
    • 您希望更新检索到的全部或部分行,并且使用 SqlDataAdapter 的批量更新功能。 
    • 您希望对其执行数据绑定的控件需要支持 IList 的数据源。 在下列情况下,请使用通过调用 SqlCommand 对象的 ExecuteReader 方法得到的 SqlDataReader: 
    • 您要处理大量的数据 — 多得难以在单个缓存中进行维护。 
    • 您希望减少应用程序的内存使用量。 
    • 您希望避免与 DataSet 相关联的对象创建开销。 
    • 您希望用对实现了 IEnumerable 的数据源提供支持的控件执行数据绑定。 
    • 您希望简化和优化数据访问。 
    • 您要读取的行包含二进制大对象 (BLOB) 列。您可以使用 SqlDataReader 在可管理的块区中将 BLOB 数据从数据库中提取出来,而不是一次将其全部提取出来。有关处理 BLOB 数据的详细信息,请参阅本文档中的处理 BLOB 一节。