DataTable Select vs List <T> LINQ性能

Jon*_*Jon 2 .net c# linq datatable performance

我有一个应用程序,它执行SQL并将一组数据加载到数据表中.作为处理的一部分,有6或7个DataTable.Select()来过滤一些数据.每个需要处理的项目需要300毫秒.有5000件物品要处理,所以需要25分钟.这是无法接受的.

是否会创建POCO并将它们加载到List中,然后使用LINQ查询列表比使用DataTable.Select更快?

谢谢

更新:我已经钻了更多,有2个数据表,每个有大约15000条记录.用于填充数据表的2个查询各占一秒.然后花费25分钟在Dictionary的values属性中循环5000个项目并执行5个DataTable.Select

例如/

foreach (OutputRecord Mailpiece in DictionaryMailpieces.Values)
{
    try
    {
        DataRow[] R = DataTable1.Select("MAILPIECE = " + Mailpiece.MailpieceSetSequenceNumber + " AND (STATUS = 4034 OR STATUS = 4037)", "DAL_DATE desc");
        if (R != null && R.Length > 0)
        {
        }
    }
    catch
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*ier 5

有趣的是,没有与您的问题相关联的"SQL"标签.我建议,您将学习如何使用SQL语言及其优点.根据您的说法,您可能会使用您的代码创建大量笛卡尔产品,而不是利用关系数据库工具(连接,索引等)

无论使用何种语言或平台,使用DataTables或列表或类似内容的交叉连接都将导致严重的性能下降.

这就是说,你可以使用LINQ,因为它是能够生产智能SQL(动态),但你还是要避免所有ToList(),ToArray的()和类似的扩展方法上的IEnumerable(T),其召集所有的基础数据(保持可以从端到端枚举,并尽可能利用"对象流".如果您真正了解什么是关系数据库以及如何有效地使用它,那么您将成为更好的LINQ开发人员.

  • Simon开始意识到在你的应用程序中进行这种数据操作是缓慢且占用大量内存的.正如你所说的那样,数据库很快,为什么不让它完成所有的工作? (3认同)