我正在使用以下代码从 MS SQL Server 表中加载数据:
using (SqlDataReader rdr = cmd.ExecuteReader())
{
if (rdr.HasRows)
{
dt.Load(rdr); //takes forever to load
}
if (dt.Rows.Count > 0 && !dt.HasErrors)
{
Parallel.For (0, dt.Rows.Count, i =>
{
byte[] docBytes = (byte[])(dt.Rows[i]["DocObject"]); File.WriteAllBytes(Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Documents\\"), $"{dt.Rows[i]["FileName"].ToString().ToLower()}"), docBytes);
});
}
}
}
这个 SQL 查询执行时间不到1秒。数据包含一个SQL图像列,保存了二进制文档数据。我使用来自System.Diagnostics的Stopwatch计时,发现这个单独的 dt.Load(rdr) 语句需要大约5分钟来加载约5000条记录。我的应用程序需要加载几百万行数据,按照这个速度,应用程序将无法使用。这是一个使用标准Windows Forms构建的Windows Forms应用程序。有什么想法,为什么 dt.Load(rdr)需要这么长时间?是否有任何重写此代码或提高其性能的方法,将不胜感激。