我創建使用的連接字符串System.Data.SQLite內存數據庫作爲System.Data.SQLite內存數據庫多線程
"Data Source=:memory:",
,並希望多線程中訪問該數據庫。
現在我所做的就是克隆SQLiteConnection
對象並將副本傳遞給工作線程。
但我發現不同的線程實際上獲取內存數據庫的個別實例,而不是共享的實例。如何在線程間共享一個內存數據庫?
謝謝!
我創建使用的連接字符串System.Data.SQLite內存數據庫作爲System.Data.SQLite內存數據庫多線程
"Data Source=:memory:",
,並希望多線程中訪問該數據庫。
現在我所做的就是克隆SQLiteConnection
對象並將副本傳遞給工作線程。
但我發現不同的線程實際上獲取內存數據庫的個別實例,而不是共享的實例。如何在線程間共享一個內存數據庫?
謝謝!
基於SQLite的documentation的內存數據庫,我會嘗試用一個URI的文件名慣例file::memory:?cache=shared
或類似的,而不是:memory:
命名爲數據源(特別注意,所有的連接都被告知要使用高速緩存名)。正如在頁面上所解釋的,:memory:
的每個實例都與您發現的完全不同。
注意您可能還必須使連接到內存數據庫(如shared cache documentation一起sqlite3_enable_shared_cache(int)
此呼叫工作規定之前,首先啓用共享緩存模式。
你會碰巧知道我可以在H2中做同樣的事嗎? –
有可能是一個正確的方法要做到這一點,但如果你在捏,你可以*嘗試*使用[內存映射文件](https://msdn.microsoft.com/en-us/library/dd997372(v = vs.110).aspx ) - 這是一個鮮爲人知的功能,但本質上,.NET允許您創建一個假文件,它只是指向一個內存區域;然後任何試圖訪問該文件的文件(包括外部應用程序等)實際上只會是反對內存工作 - 雖然我不知道SQLite如何喜歡多個線程同時對同一個文件進行對話,但他們可能會對每個o他們的腳和腐敗的文件。 – BrainSlugs83