Воспользуйтесь преимуществами нескольких ядер, выполняющих операторы SQL - PullRequest
1 голос
/ 31 марта 2009

У меня есть небольшое приложение, которое читает файлы XML и вставляет информацию в базу данных SQL.

Необходимо импортировать ~ 300 000 файлов, каждый из которых содержит ~ 1000 записей.

Я запустил приложение на 20% файлов, и оно работает уже 18 часов, надеюсь, я смогу улучшить это время для остальных файлов.

Я не использую многопоточный подход, но так как компьютер, на котором я запускаю процесс, имеет 4 ядра, я думал об этом, чтобы добиться некоторого улучшения производительности (хотя я думаю, что основная проблема заключается в Ввод / вывод, а не только обработка).

Я думал об использовании метода BeginExecutingNonQuery () для объекта SqlCommand, который я создаю для каждой вставки, но я не знаю, следует ли мне ограничивать максимальное количество одновременных потоков (и я не знаю, как это сделать).

Что вы посоветуете для наилучшего использования процессора?

Спасибо

Ответы [ 3 ]

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

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

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

Вы пытались использовать SqlBulkCopy ? По сути, вы загружаете свои данные в экземпляр DataTable, а затем используете класс SqlBulkCopy для загрузки их в SQL Server. Должно предложить ОГРОМНОЕ увеличение производительности без такого большого изменения в вашем текущем процессе, как при использовании bcp или другой утилиты.

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

Просмотр массовая вставка .

Импортирует файл данных в таблицу базы данных или представление в заданном пользователем формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...