我正在创建一个 Windows 应用程序,我需要在其中使用 ado.net/(或使用 C# 的任何其他方式(如果有))获取数据。从一张桌子。数据库表显然有周围的100000
记录,下载需要很长时间。
有没有更快的方法可以让我更快地获取数据?
我试过了,DataReader
但还是不够快。
我正在创建一个 Windows 应用程序,我需要在其中使用 ado.net/(或使用 C# 的任何其他方式(如果有))获取数据。从一张桌子。数据库表显然有周围的100000
记录,下载需要很长时间。
有没有更快的方法可以让我更快地获取数据?
我试过了,DataReader
但还是不够快。
数据阅读器 API 是您可以做的最直接的 API。重要的是时间在哪里?
您可以通过在机器上本地运行查询来找出答案,并查看需要多长时间。如果带宽是您的限制,那么您真正可以尝试的只是删除您实际上不需要的列(不要这样做select *
)。或者为您和服务器之间的更粗的管道付费。在某些情况下,在本地查询数据并以某种压缩形式返回数据可能会有所帮助 - 但您实际上是在谈论诸如 Web 服务之类的东西,它还有其他带宽考虑因素。
不过,更有可能的是,问题在于查询本身。通常情况下,例如:
您可能想要实现需要知道的基础方法。只拉下需要的第一块数据,然后在需要下一组数据时,拉下这些行。
可能是您的查询太慢而不是流式处理。您应该向我们展示您的 sql 查询,然后我们可以帮助您改进它。
假设您想从表中获取所有 100000 条记录,您可以使用 aSqlDataAdapter
填充 aDataTable
或 aSqlDataReader
填充 a List<YourCustomClass>
:
方法(因为我不知道你的DataTable
领域很难展示一个类):
var table = new DataTable();
const string sql = "SELECT * FROM dbo.YourTable ORDER BY SomeColumn";
using(var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
using(var da = new SqlDataAdapter(sql, con))
{
da.Fill(table);
}