c# - DataTable Select 与 List<T> LINQ 性能

标签 c# .net linq performance datatable

我有一个执行 SQL 并将一组数据加载到数据表中的应用程序。作为处理的一部分,有 6 或 7 个 DataTable.Select() 来过滤一些数据。每个需要处理的项目需要 300 毫秒。有 5000 个项目要处理,因此需要 25 分钟。这是 Not Acceptable 。

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

谢谢

更新:我进行了更深入的研究,发现有 2 个数据表,每个数据表都有大约 15000 条记录。用于填充数据表的 2 个查询各需要一秒钟。然后需要 25 分钟来循环字典的值属性中的 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
    {
    }
}

最佳答案

有趣的是没有与您的问题关联的“SQL”标签。我建议您学习如何使用 SQL 语言及其优势。根据您的说法,您很可能使用您的代码创建了很多 Cartesian products ,而不是利用 Relational Database设施(连接、索引等)

无论使用何种语言或平台,使用 DataTables 或 Lists 或任何类似的交叉连接总是会导致严重的性能下降。

也就是说,您可以使用 LINQ,因为它能够(动态地)生成智能 SQL,但您仍然希望避免所有 ToList()、ToArray() 和 IEnumerable(T) 上调用所有底层数据的类似扩展方法(让它从头到尾保持可枚举,并尽可能利用“对象流”)。如果您真正了解什么是关系数据库以及如何有效地使用它,您将成为更好的 LINQ 开发人员。

关于c# - DataTable Select 与 List<T> LINQ 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969525/

相关文章:

c# - HttpPostedFileBase 与 HttpPostedFileWrapper 的关系

c# - 我的强连接组件算法出错

c# - 使用 WinAPI 设置 ListViewItem 的选中状态

c# - Azure AD 异常 - AADSTS50105 - "The signed in user is not assigned to a role for the application"

c# - 为什么.NET 框架不提供深度复制对象的方法?

c# - 是否可以像 LINQ 一样创建 C# 语言修改?

c# - linq "let"翻译

c# - 如何在 .NET 3 控制台应用程序的打印行中间获取输入

.net - 如何从命令行界面使用 Microsoft.CodeAnalysis.NetAnalyzers 运行 .NET 应用程序的代码分析

c# - 使用 linq 将共享点列表数据绑定(bind)到下拉列表