Если вы вызываете ReadXml для загрузки очень большого файла, вы можете столкнуться с медленная производительность. Чтобы обеспечить максимальную производительность ReadXml для большого файла, вызовите метод BeginLoadData для каждой таблицы в DataSet, а затем вызовите ReadXml. Наконец, вызовите EndLoadData для каждой таблицы в DataSet, как показано в следующем примере.
Код: Выделить всё
foreach (DataTable dataTable in dataSet.Tables)
dataTable.BeginLoadData();
dataSet.ReadXml("file.xml");
foreach (DataTable dataTable in dataSet.Tables)
dataTable.EndLoadData();
При вызове DataTable.EndLoadData первый DataTable, он восстанавливает DataSet.EnforceConstraints до значения, которое он (= первый DataTable) сохранил как предыдущее состояние, что является правдой. Но когда DataTable.EndLoadData вызывается для второй таблицы, он восстанавливает DataSet.EnforceConstraints до значения, которое он (= второй DataTable) сохранил как предыдущее состояние, что является ложным. Таким образом, DataSet.EnforceConstraints оказывается ложным, хотя изначально оно было истинным.
Как это должно работать? Должны ли мы гарантировать, что первый DataTable, для которого мы вызываем BeginLoadData, является также последним, для которого мы вызываем EndLoadData?
Или нам следует явно установить для DataSet.EnforceConstraints значение true в качестве последнего шага?
Подробнее здесь: https://stackoverflow.com/questions/793 ... oaddata-da