我有一个执行 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/