Я загружаю данные из таблицы 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-запрос выполняется менее чем за одну секунду. Данные содержат столбец изображения SQL, который содержит двоичные данные документа. Я использовал секундомер из System.Diagnostics для определения времени выполнения и обнаружил, что этот единственный оператор dt.Load (rdr) занимает около 5 минут для загрузки около 5000 записей. Моему приложению нужно загрузить несколько миллионов строк, и в таком случае приложение будет непригодным для использования. Это приложение Windows Forms, созданное с использованием стандартных форм Windows Forms. Любые идеи, почему dt.Load (rdr) берет навсегда? Будем весьма благодарны за любые идеи по переписыванию этого кода или улучшению его производительности.