iPhone 용 모노 터치에 비교적 작은 프로젝트가 있습니다. & Android with WP7을 추가 할 계획입니다. SQLite에 ORM으로 vici coolstorage를 사용하고 있는데 문제가되지 않지만 문제가 하나 있습니다. db를 사용하여 스레드 당 추가 스레드를 작성합니다. 응용 프로그램이 대규모 병렬이므로 이미 스레드 한계에 도달했습니다. 그래서이를 변경하려고합니다. 제가 서로 다른 스레드로부터 GetDB 각 통화가 새로운 스레드가 생성된다 스레드가 생성 CSConfig.cs 행한다 발견 :Vici coolstorage 추가 스레드
internal static CSDataProvider GetDB(string strContext)
{
if (_threadData == null)
_threadData = new ThreadData();
return _threadData.GetDB(strContext);
}
_threadData
[ThreadStatic]
가 표시된다. 이 GetDB는 ORM을 사용할 때마다 호출됩니다 (CSConfig에서 기본 DB를 내 DB로 설정). 스레드는 ThreadData
생성자 안에 생성됩니다. 스레드는이 함수를 실행합니다.
private void CleanupBehind()
{
_callingThread.Join();
foreach (CSDataProvider db in _threadDbMap.Values)
db.Dispose();
}
따라서 본질적으로 호출자가 종료 될 때까지 기다린 다음 데이터베이스 연결을 삭제합니다.
질문은 어떻게하면이 동작을 무시할 수 있으며 호출 스레드가 종료되기 전에 GC가 데이터베이스 연결을 처리하도록하거나 Dispose()
을 호출하게 할 수 있습니다 (DB를 사용하는 모든 스레드를 제어하므로 수행 할 수 있습니다). 스레드가 끝날 때 ORM이 연결 해제를 처리하지 못하게하는 것이 좋지 않지만 작업자 스레드 당 하나의 추가 스레드로는 작업 할 수 없습니다.
매우 흥미로운 질문입니다. 나는 나중에 약간의 피드백과 함께 되돌아 올 것이다. –