2012-09-14 1 views
4

내가 연결 문자열을 사용하여 System.Data.SQLite 메모리 데이터베이스를 생성하고 멀티 스레딩 및 멀티 스레드간에이 데이터베이스에 액세스 할 수 있습니다.System.Data.SQLite 메모리 데이터베이스</p> <pre><code>"Data Source=:memory:", </code></pre> <p>으로

이제는 SQLiteConnection 개체를 복제하고 복사본을 작업자 스레드에 전달하는 방법을 설명합니다.

하지만 다른 스레드가 실제로 메모리 내 데이터베이스의 개별 인스턴스를 공유하는 것이 아니라는 사실을 알게되었습니다. 스레드간에 하나의 메모리 내 데이터베이스를 공유하려면 어떻게합니까?

감사합니다. 인 메모리 데이터베이스에 대한 SQLite는 documentation을 바탕으로

+0

이렇게하려면,하지만 만약 당신이 꼬집었다면, [메모리 매핑 된 파일] (https://msdn.microsoft.com/en-us/library/dd997372 (v = vs.110) .aspx를 사용하여 * 시도 할 수 있습니다.) - 조금 알려진 기능이지만, .NET은 가짜 파일을 만들어 메모리 영역을 가리키며, 그 파일에 액세스하려고 시도하는 모든 것 (외부 앱 등 포함)은 실제로는 - 대신 SQLite가 한 번에 같은 파일을 여러 스레드가 말하는 것을 좋아하는 지 모르겠다. thers '발 및 파일을 손상시킵니다. – BrainSlugs83

답변

4

, 나는 URI 파일 이름 규칙 file::memory:?cache=shared 또는 대신 :memory:의 등으로 명명 된 데이터 소스를 시도 (특히 모든 연결이 사용하는 말되고있는 캐시 이름을주의) 것입니다. 이 페이지에서 설명했듯이 :memory:의 모든 인스턴스는 서로 정확하게 구별됩니다.

참고 또한 첫 번째 작업이에 대한 sqlite3_enable_shared_cache(int)의 호출로 shared cache documentation에 명시된 바와 같이 (인 - 메모리 데이터베이스에 연결하기 전에 공유 캐시 모드를 사용 할 수 있습니다.

아마 올바른 방법있다
+0

H2에서 어떻게 똑같이 할 수 있는지 알고 싶습니까? –