Sql DataTable-为什么第一个.Select()语句非常慢?

Sql DataTable-为什么第一个.Select()语句非常慢?,sql,vb.net,winforms,performance,datatable,Sql,Vb.net,Winforms,Performance,Datatable,以下代码在运行时执行几次 我的问题是,该代码的第一次执行要比所有后续执行慢得多。 即使每次执行都为“strVariable”分配了不同的值 Dim Rows() As DataRow = __DataSet.Tables("TableName").Select("IdL = '" & strVaraible & "'") 这是正常行为吗?你知道治疗方法吗 背景信息:数据集由3个表组成。TableName最大,有600000行和4列。另外两个要小得多,大约有1000行8列。正是由

以下代码在运行时执行几次

我的问题是,该代码的第一次执行要比所有后续执行慢得多。 即使每次执行都为“strVariable”分配了不同的值

Dim Rows() As DataRow = __DataSet.Tables("TableName").Select("IdL = '" & strVaraible & "'")
这是正常行为吗?你知道治疗方法吗


背景信息:数据集由3个表组成。TableName最大,有600000行和4列。另外两个要小得多,大约有1000行8列。

正是由于表的大小,一些表被移动到页面文件中,当您第一次运行它时,它必须将它从页面文件移动到内存中。检查你的性能监视器是否有内存故障和/或IO使用情况。不确定这是否是你的答案,所以我在这里发表评论。但是查看类Select的源代码DataTable类用来解析Select方法的一个内部类,您可以看到第一次调用这个类时,它会执行许多在第二次调用中被跳过的操作。它构建了一个索引类并做了其他关于排序的事情,我只能建议不要在内存中保留600000条记录。相关代码在SelectRows方法中。Steve,这是一个很好的提示!我将浏览.Select函数的源代码,并尝试优化我的表,以便更快地处理第一次运行的操作。您是否知道跳过该操作或在第一次操作之前预运行的方法。选择?当然,我可以只运行一个“假”。选择预加载它,但有更好的解决方案吗?使用实体框架而不是数据集-这些可以最大限度地减少和自动化对数据存储的调用数量和大小