Я сомневаюсь, что проблема, которую вы выполняете, является проблемой. Если запрос не фильтруется на массивном (миллионы / миллиарды) наборе данных, я не вижу проблем с ним - даже если вы выполняете 12 (я предполагаю для каждого месяца?) Этих запросов. Кроме того, пока я писал, планировали ли вы вообще использовать DataTable? Каждый месяц вы заполняете таблицу, а затем выбрасываете ее. (Поскольку вы упоминаете, что база данных составляет всего ~ 300 тыс., Невозможно, чтобы сами запросы занимали какое-то значительное время).
Вероятно, это как-то связано с сетью или самим файлом. Как я уже сказал, вы выполняете 12 запросов, но разрываете соединение при успешном выполнении каждого из них. Это означает, что вам нужно установить 12 соединений, а также выполнить 12 запросов. Вам следует выяснить, можете ли вы поддерживать одно соединение для набора запросов, которые вам нужно выполнить.
Другая возможность - блокировка. Может ли файл базы данных поддерживать несколько соединений и выполнять несколько запросов для разных пользователей? Я вообще не знаю продукт dbase, но если он однопользовательский / однопоточный, это может быть случай, когда другие люди используют базу данных и на какое-то время блокируют вас.
Попробуйте скопировать базу данных на локальный компьютер, изменив строку подключения, чтобы она ссылалась на локальную копию, и снова запустите этот код. Если время выполнения значительно сократится, я уверен, что вы сможете с уверенностью сказать, что существует какая-то проблема с сетью. С этого момента вам (вероятно) нужно будет обратиться за помощью к кому-то из вашей организации. 5-10 минут на 12, казалось бы, простых запросов - шутка.
Если причиной проблемы является сеть, вы можете воспользоваться несколькими вариантами.
- Попросите сотрудников сети / инфраструктуры провести расследование. Это может быть диск на общем ресурсе или перегруженный сетевой ввод-вывод.
- Скопировать базу данных на машину в начале программы. Это будет работать, только если вы только читаете, и вам не нужны обновленные данные. Кроме того, копировать в локальную в начале каждого запроса, и только писать в сеть. Это сохранит (относительно) свежие данные и обеспечит правильность всех записей. Однако, если вы делаете много запросов, сетевая стоимость копирования всего файла, вероятно, будет иметь худшую производительность.
- Используйте лучший продукт базы данных (моя рекомендация). Настройте сервер базы данных, используя Postgres или MySql (я советую Postgres), перенесите данные dbase на сервер и получите все свои приложения, которые ссылаются на точку файла dbase, на сервер базы данных. Вы действительно должны делать это, если для доступа к базе данных требуется более одного соединения. Если для доступа к базе данных требуется только одно соединение, база данных должна находиться на компьютере, осуществляющем доступ.