Улучшение производительности DataSet.ReadXml с помощью DataTable.BeginLoadData: DataSet.EnforceConstraints оставлено falC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Улучшение производительности DataSet.ReadXml с помощью DataTable.BeginLoadData: DataSet.EnforceConstraints оставлено fal

Сообщение Anonymous »

В разделе «Загрузка набора данных из XML» я нашел следующее утверждение:

Если вы вызываете 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();
После выполнения этого кода dataSet.EnforceConstraints имеет значение false, если предположить, что dataSet содержит более одной таблицы. Насколько я понимаю, это связано с тем, что DataTable.BeginLoadData сохраняет предыдущее состояние DataSet.EnforceConstraints, а затем устанавливает для него значение false. Когда BeginLoadData вызывается для второй таблицы, DataSet.EnforceConstraints уже имеет значение false, и, следовательно, второй DataTable сохраняет значение false как предыдущее состояние DataSet.EnforceConstraints.
При вызове 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»