【发布时间】:2011-08-23 14:16:25
【问题描述】:
我有一个执行 SQL 并将一组数据加载到数据表中的应用程序。作为处理的一部分,有 6 或 7 个 DataTable.Select() 来过滤一些数据。每个需要处理的项目需要 300 毫秒。有 5000 个项目需要处理,因此需要 25 分钟。这是不可接受的。
创建 POCO 并将它们加载到列表中,然后使用 LINQ 查询列表会比使用 DataTable.Select 更快吗?
谢谢
更新:我已经深入研究了,有 2 个数据表,每个数据表大约有 15000 条记录。用于填充数据表的 2 个查询各需要一秒钟。然后需要 25 分钟循环字典的 values 属性中的 5000 多个项目并执行 5 DataTable.Select's
例如/
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
{
}
}
【问题讨论】:
-
DataTable.Select()和LINQList将有效地做同样的事情。您需要重新考虑您的逻辑,也许通过添加一些缓存?您还可以提供一些您正在执行的过滤类型的示例。例如,如果您使用Select查找单个行,则在单个循环中逐行遍历数据集可能会更有效。 -
什么是Select方法过滤模式?我认为这需要很长时间。
-
不要猜测性能问题,拿出分析器并测量它们。
-
请您推荐一个易于理解/设置的分析器?
标签: c# .net linq performance datatable