то получается очень длительный процесс. Возможно это как то ускорить.
Например, сформировать сначала всю 1000 строк, а затем добавить их одной командой?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте!
А>Нужно в таблицу добавить 1000 строк. А>Если выполнять в цикле от 1 до 1000
А> sql_cmd.CommandText = "insert into tablename (column1, column2) values ('значение1', 'значение2'); А> sql_cmd.ExecuteNonQuery();
А>то получается очень длительный процесс. Возможно это как то ускорить. А>Например, сформировать сначала всю 1000 строк, а затем добавить их одной командой?
А>Спасибо за любую помощь!
Если выполнять все запросы в одной транзакции, то будет быстрее.
Если надо еще быстрее, то можно попробовать отключить синхронизацию записи в файл (точное название параметра строки соединения не помню, но думаю найдешь, там их не много).
От этих действий будет самый большой прирост скорости. Есть еще параметры подключения, но от их изменения врядли добъешся большого прироста.
Не стесняйся искать на сайте производителя
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте!
А>Нужно в таблицу добавить 1000 строк. А>Если выполнять в цикле от 1 до 1000
А> sql_cmd.CommandText = "insert into tablename (column1, column2) values ('значение1', 'значение2'); А> sql_cmd.ExecuteNonQuery();
А>то получается очень длительный процесс. Возможно это как то ускорить. А>Например, сформировать сначала всю 1000 строк, а затем добавить их одной командой?
Перед циклом выполните
using (var cmd = new SQLiteCommand("BEGIN", connection))
cmd.ExecuteNonQuery();
После цикла
using (var cmd = new SQLiteCommand("COMMIT", connection))
cmd.ExecuteNonQuery();
Должно существенно помочь, особенно при наличии индекса.
Re[2]: c# и SQLite
От:
Аноним
Дата:
02.02.09 20:51
Оценка:
S>Перед циклом выполните S>
S>using (var cmd = new SQLiteCommand("BEGIN", connection))
S> cmd.ExecuteNonQuery();
S>
S>После цикла S>
S>using (var cmd = new SQLiteCommand("COMMIT", connection))
S> cmd.ExecuteNonQuery();
S>
S>Должно существенно помочь, особенно при наличии индекса.
Спасибо всем!
Теперь все просто летает!
Еще один вопросик.
Нужно работать с файлом базы данных одновременно из двух приложений.
На данный момент при подключении к базе данных из второго приложения получаю сообщение,
что файл уже используется. Строка подключения:
private SQLiteConnection sql_con;
sql_con = new SQLiteConnection("Data Source=my.db;Version=3;New=False;Compress=True;");
Здравствуйте, <Аноним>, Вы писали:
А>Еще один вопросик. А>Нужно работать с файлом базы данных одновременно из двух приложений.
SQLite это однопользовательская встаиваемая СУБД. Она специально затачивалась под работу в одном приложении.
Так что короткий ответ: меняйте или движок или постановку задачи.
Длинный ответ: Отключите connection pool и введите внешний механизм синхронизации обращений к базе (именованный mutex). На каждый чих прийдётся открывать подключение и закрывать его. Т.е. как-то так
_mutex.WaitOne();
conn.Open();
// работаем с базой
conn.Close();
_mutex.ReleaseMutex();
Здравствуйте, Аноним, Вы писали:
А>private SQLiteConnection sql_con; А>sql_con = new SQLiteConnection("Data Source=my.db;Version=3;New=False;Compress=True;");
А>Можно это подправить?
попробуйте увеличить таймауты на подключение. SQLite для записи в базу хочет что-бы у нее не было активных читателей...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: c# и SQLite
От:
Аноним
Дата:
12.09.09 12:34
Оценка:
На форуме sqlite.phxsoftware.com http://sqlite.phxsoftware.com/forums/t/134.aspx в самом конце поста автор дает простой примерчик, и обещает, что таким образом 100000 записей вставляется за 1,4 секунды. Сам не проверял