Multithreading Vici coolstorage附加线程

Multithreading Vici coolstorage附加线程,multithreading,mono,xamarin.ios,coolstorage,vici,Multithreading,Mono,Xamarin.ios,Coolstorage,Vici,我有一个关于iPhone和Android的monotouch的相对较小的项目,计划添加WP7。 我使用vici coolstorage作为SQLite上的ORM,它对我来说很好,但有一个问题。它使用db为每个线程创建额外的线程。我已经达到了线程的极限,因为应用程序是大规模并行的,所以我想改变它。 我发现线程创建是在CSConfig.cs中执行的,其中对于来自不同线程的GetDB调用,将创建一个新线程: internal static CSDataProvider GetDB(string

我有一个关于iPhone和Android的monotouch的相对较小的项目,计划添加WP7。 我使用vici coolstorage作为SQLite上的ORM,它对我来说很好,但有一个问题。它使用db为每个线程创建额外的线程。我已经达到了线程的极限,因为应用程序是大规模并行的,所以我想改变它。 我发现线程创建是在CSConfig.cs中执行的,其中对于来自不同线程的GetDB调用,将创建一个新线程:

    internal static CSDataProvider GetDB(string strContext)
    {
        if (_threadData == null)
            _threadData = new ThreadData();

        return _threadData.GetDB(strContext);
    }
_threadData标记为[ThreadStatic]。 我假设每次使用ORM时都会调用这个GetDB,我将CSConfig中的默认DB设置为my DB。 线程是在ThreadData构造函数中创建的。线程执行此函数:

        private void CleanupBehind()
        {
            _callingThread.Join();

            foreach (CSDataProvider db in _threadDbMap.Values)
                db.Dispose();
        }
因此,本质上它会等待调用方终止,然后处理数据库连接


问题是,我如何重写这个行为,让GC处理数据库连接,或者在调用线程终止之前自己调用dispose,我使用DB控制所有线程,这样我就可以做到。我知道在线程结束时不让ORM处理断开连接是不好的,但我不能在每个工作线程中使用一个额外的线程。

好的,我知道回答自己的问题是不好的,但仍然如此。也许它能帮助别人。 我已经做了一个变通方法,就是在CSConfig中添加一个清理函数。我已经完全删除了线程创建,并在任何使用数据库的线程终止之前调用清理。因此,我没有额外的线程

这导致了一个问题:我在某些情况下使用强制线程终止,主要是当线程在网络操作中时。因此,我必须不时地遍历所有数据库连接,并删除所有属于死线程的连接


但毕竟我的线程减少了近两倍。

这是一个非常有趣的问题。今天晚些时候我会带着一些反馈回来