Проблема в большом времени записи в таблицу. Есть массив данных, которые нужно вставить в таблицу. Если в цикле выполнять INSERT и ExecuteNonQuery(), получается очень долго. Как ускорить процесс?
Здравствуйте, vasya-serega, Вы писали:
VS>Проблема в большом времени записи в таблицу. Есть массив данных, которые нужно вставить в таблицу. Если в цикле выполнять INSERT и ExecuteNonQuery(), получается очень долго. Как ускорить процесс?
Удалите индексы
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, vasya-serega, Вы писали:
VS>Проблема в большом времени записи в таблицу. Есть массив данных, которые нужно вставить в таблицу. Если в цикле выполнять INSERT и ExecuteNonQuery(), получается очень долго. Как ускорить процесс?
Когда-то давно сравнивал DBF с другими форматами локальных баз, так на моих тестовых примерах в скорости вставки он проигрывал раза в 3-5 тому же Access-овскому файлу mdb. Правда писал на Delphi, использовал BDE для работы с dbf и ADO для Access. А BDE работает с dbf очень-очень шустро, а ADO в Delphi было не очень... А продукты MS наоборот заточены под ADO. Так что может подумать о смене формата, если это возможно (Ну предварительно попробывать без индексов, и с использованием какой-нибудь сторонней библиотеки для работы с dbf).
Здравствуйте, Nonmanual Worker, Вы писали:
NW>Когда-то давно сравнивал DBF с другими форматами локальных баз, так на моих тестовых примерах в скорости вставки он проигрывал раза в 3-5 тому же Access-овскому файлу mdb. Правда писал на Delphi, использовал BDE для работы с dbf и ADO для Access. А BDE работает с dbf очень-очень шустро, а ADO в Delphi было не очень... А продукты MS наоборот заточены под ADO. Так что может подумать о смене формата, если это возможно (Ну предварительно попробывать без индексов, и с использованием какой-нибудь сторонней библиотеки для работы с dbf).
Индексы не использую,
бесплатных библиотек для dbf не знаю, если знаете, подскажите,
а к смене формата подойду в крайнем случае, подходит xml, но очень уж много переписывать кода
Здравствуйте, vasya-serega, Вы писали:
VS>Индексы не использую, VS>бесплатных библиотек для dbf не знаю, если знаете, подскажите, VS>а к смене формата подойду в крайнем случае, подходит xml, но очень уж много переписывать кода
А нельзя ли не переписывать много кода, а написать один класс, к которому будет идти обращение при необходимости получения/сохранения баз? ИМХО при этом подходе вашей программе будет всёравно с какими данными работать.
Здравствуйте, vasya-serega, Вы писали:
VS>Индексы не использую, VS>бесплатных библиотек для dbf не знаю, если знаете, подскажите, VS>а к смене формата подойду в крайнем случае, подходит xml, но очень уж много переписывать кода
Я к сожалению новичек в .Net, поэтому библиотек порекомендовать не могу.
Вы работаете с таблицами dbf через ODBC?
Здравствуйте, vasya-serega, Вы писали:
VS>Проблема в большом времени записи в таблицу. Есть массив данных, которые нужно вставить в таблицу. Если в цикле выполнять INSERT и ExecuteNonQuery(), получается очень долго. Как ускорить процесс?
Да. Очень долго получается. Поэтому когда встала такая задача, была изучена спецификация DBF формата и за несколько часов написан код, перегоняющий DataTable прямиком в DBF файл. Там структура очень простая поэтому сложностей быть не должно. Кодом, к сожалению, поделиться не могу.
Если Вы работаете с ADO.NET, то попробуйте использовать batch update. Для этого используйте DataAdapter и увеличьте свойство DbDataAdapter.UpdateBatchSize, возможно, быстродействие увеличится.
Здравствуйте, andrex, Вы писали:
A>Здравствуйте, vasya-serega, Вы писали:
A>Да. Очень долго получается. Поэтому когда встала такая задача, была изучена спецификация DBF формата и за несколько часов написан код, перегоняющий DataTable прямиком в DBF файл. Там структура очень простая поэтому сложностей быть не должно. Кодом, к сожалению, поделиться не могу.
Тоже выход. Формат открытый, индекстов у вас нет, версия файла dbf — одна, структура файла (поля) известна, и менять ее не нужно, новые записи дописываются в конец файла dbf, итого задача заключается в дописывании строк к концу текстового файла. Данные полей всех типов хранятся как строки, т.е. нумерик(10) = 100 будет в файле как строка ' 10'. Халява Работы на час, если нет мемо полей (шни хранятся в бругом файле). Зато скорость вставки будет просто космической
Здравствуйте, Nonmanual Worker, Вы писали:
NW>Тоже выход. Формат открытый, индекстов у вас нет, версия файла dbf — одна, структура файла (поля) известна, и менять ее не нужно, новые записи дописываются в конец файла dbf, итого задача заключается в дописывании строк к концу текстового файла. Данные полей всех типов хранятся как строки, т.е. нумерик(10) = 100 будет в файле как строка ' 10'. Халява Работы на час, если нет мемо полей (шни хранятся в бругом файле). Зато скорость вставки будет просто космической
Пасиб, именно на этом варианте и остановился. Ну насчет часа работы сомневаюсь