Самый быстрый способ зацикливания и копирования данных из одного набора данных в другой набор данных - PullRequest
2 голосов
/ 23 марта 2009

У меня есть один DataSet, который содержит 2 относящихся DataTable (мастер и детали). Я хочу скопировать данные, которые соответствуют моему фильтру (например, столбец основных данных A = "XXX"), в другой набор данных.

Теперь я обнаружил, что этот процесс занимает очень очень много времени (около одного часа для 1k записей).

Я хочу знать, как улучшить это время обработки?

Ответы [ 3 ]

2 голосов
/ 25 марта 2009

Я бы сказал, что копирование 1000 записей должно занять всего несколько миллисекунд. Удостоверьтесь, что нет событий, инициирующих события или делающих странные вещи. Может быть, вы должны попробовать без отношений, но я считаю, что forceforcontraints = false также отключить проверку внешнего ключа

Следующий код копирует полный набор данных довольно быстро:

fDstDataSet.EnforceConstraints = false;
foreach (DataTable fSrcTable in fSrcDataSet.Tables)
{
    DataTable fDstTable = fOpenOrders.Tables[fSrcTable.TableName];
    foreach (DataRow fSrcRow in fSrcTable.Rows)
    {
        fDstTable.ImportRow(fSrcRow);
    }
}
fDstDataSet.EnforceConstraints = true;
1 голос
/ 23 марта 2009

Возможно, вы захотите попробовать;

 myDataSet.Tables[0].Select("A = 'xxx'");

Что возвращает DataRow[]

0 голосов
/ 23 марта 2009

Вы могли бы получить некоторую выгоду, изложив свою проблему более подробно - возможно, есть лучший вариант, чем дублирование данных.

Если вы действительно хотите пойти по этому пути, вы можете взглянуть на класс DataView:

http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx

Это позволит вам извлекать данные на основе фильтра из таблицы данных. DataView также имеет метод ToTable:

http://msdn.microsoft.com/en-us/library/system.data.dataview.totable.aspx

Возвращает таблицу данных на основе выбранных строк в DataView.

Это должно работать лучше, чем ваша версия, хотя я не уверен, что другие варианты снова предоставят более быстрые реализации. Я считаю, что вышеупомянутый DataTable.Select будет работать лучше, чем DataView

...