我有一個相對較小的項目,對iPhone iPhone & Monoouch項目有計劃添加WP7。 我使用vici coolstorage作爲SQLite上的ORM,它對我來說工作正常,但有一個問題。它使用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中將默認數據庫設置爲我的數據庫)。 線程在ThreadData
構造函數內部創建。而線程執行此功能:
private void CleanupBehind()
{
_callingThread.Join();
foreach (CSDataProvider db in _threadDbMap.Values)
db.Dispose();
}
所以,本質上它等待來電者終止,然後部署數據庫連接。
問題是,我該如何覆蓋這種行爲,讓GC處理數據庫連接或在調用線程終止之前調用我自己的Dispose()
(我控制所有使用數據庫的線程,這樣我就可以做到這一點)。我知道當線程結束時不讓ORM處理斷開連接,但我不能在每個工作線程使用一個附加線程。
非常有趣的問題。今天晚些時候我會回覆一些反饋 – 2013-03-05 16:15:35