CRi*_*ice 21 c# datatable ienumerable list
我正在与我合作的另一位程序员进行辩论.
对于数据库返回类型,是否有任何重要的内存使用或性能差异,或其他缺点应该使某人避免使用DataSet和DataTables并支持实现的类型IEnumerable<T>
...反之亦然
我更喜欢返回实现IEnumerable<T>
(List<T>, T[] etc
)的类型,因为它更轻量级,在访问属性时强烈地键入对象,允许有关底层类型的更丰富信息等.当手动使用数据读取器时,它们确实需要更多时间来设置.
这几天使用DataTables的唯一理由就是懒惰吗?
Dan*_*ola 21
DataTables肯定比Lists重得多,无论是在内存需求方面,还是在创建它们/填充它们的处理器时间方面.
使用DataReader比使用DataTables(我假设您使用DataAdapter来填充它们)要快得多(尽管更冗长).
那就是说......除非这个地方真正重要,否则你可能都很好,两种方法都足够快,所以在每种情况下都可以选择更舒适的方法.(有时你想用很少的代码填充它们,有时你想用很少的代码读它们)
我自己倾向于仅在绑定到GridView时使用DataTables,或者当我需要同时激活多个结果集时.
Joh*_*ant 10
使用System.Collections类的另一个好处是可以获得更好的排序和搜索选项.我不知道有任何合理的方法来改变DataTable的排序或搜索方式; 使用集合类,您只需要实现IComparable或IEquatable,就可以完全自定义List.Sort和List.Contains的工作方式.
还有列表你不必担心DBNull,因为我期待null并获得DBNull,因此不止一次使我失望.
我也喜欢这样的事实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); } }
}
Run Code Online (Sandbox Code Playgroud)