Member 10525430 Ответов: 3

Как я могу запустить один фоновый рабочий несколько раз


Фоновый рабочий действительно читает txt-файлы и записывает их на mssql-сервер.
Я хочу использовать один backgroundworker несколько раз.
Есть много файлов, и одного backgroundworker недостаточно для чтения файлов, это заняло много времени.

У вас есть какие-нибудь идеи?

Что я уже пробовал:

ничего особенного для поиска в google нет и т. д.

Mehdi Gholam

делай ... пока

BillWoodruff

Если все считываемые файлы записываются в один экземпляр MSSQL: я не думаю, что улучшение производительности возможно. Однако параллельные запросы возможны.

см.: https://blogs.msdn.microsoft.com/sqlcat/2006/05/19/load-1tb-in-less-than-1-hour/

3 Ответов

Рейтинг:
2

Leo Chapiro

Взгляните на эту функцию, она очень проста:

Как это сделать: напишите простую параллель.Цикл ForEach / Microsoft Docs[^]

В этом случае вам вообще не нужен явный созданный рабочий поток!


Рейтинг:
2

RickZeeland

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


Рейтинг:
1

OriginalGriff

BackgroundWorker-это, по сути, поток, поэтому вы не хотите запускать одного рабочего несколько раз, вы хотите запускать несколько рабочих на одном и том же коде. Это легко сделать: просто создайте новый BackgroundWorker для каждого текстового файла и передайте каждому экземпляру другой файл для обработки. Все, что вам нужно для этого, - это цикл для файлов и копия вашего существующего кода внутри него:

foreach (string file in files)
   {
   BackgroundWorker work = new BackGroundWorker();
   ...
   work.RunWorkerAsync(file);
   }
Затем вы можете забрать файл из e.Свойство аргумента внутри обработчика событий DoWork.