2015-12-29 2 views
0

Я пытаюсь заставить SQLite полностью работать в памяти. Я использую следующую строку соединения:SQLite: память: индексы все еще записываются на диск

var conn = new SQLiteConnection(@"Data Source=:memory:;Synchronous=OFF; 
    Journal Mode=OFF;Cache Size=10000"); 

Я пишу 10000000 вставки, завернутые в сделке - это происходит так быстро, как и следовало ожидать, и не прикасайтесь к диску.

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

Я предполагаю, что есть настройка/PRAGMA. Я не хватает, но я ее не нашел. Любая помощь будет оценена!

ответ

0

Я повозился с настройками некоторые больше и увеличение как размер страницы и размер кэша:

var conn = new SQLiteConnection(@"Data Source=:memory:;Synchronous=OFF; 
      Journal Mode=OFF;Cache Size=1000000;Page Size=8192;"); 

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

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

Смежные вопросы