首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vici冷库附加线程

Vici冷库附加线程
EN

Stack Overflow用户
提问于 2013-03-05 15:58:14
回答 1查看 168关注 0票数 1

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

代码语言:javascript
复制
    internal static CSDataProvider GetDB(string strContext)
    {
        if (_threadData == null)
            _threadData = new ThreadData();

        return _threadData.GetDB(strContext);
    }

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

代码语言:javascript
复制
        private void CleanupBehind()
        {
            _callingThread.Join();

            foreach (CSDataProvider db in _threadDbMap.Values)
                db.Dispose();
        }

因此,本质上,它等待调用者终止,然后处理数据库连接。

问题是,如何覆盖此行为,让GC处理数据库连接,或者在调用线程终止之前亲自调用Dispose() (我使用DB控制所有线程,因此我可以这样做)。我知道当线程结束时不让ORM处理断开连接是不好的,但是我不能处理每个工作线程的额外线程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-29 20:05:44

好吧,我知道回答自己的问题是不好的,但还是。也许能帮上忙。我已经做了一个解决办法,就是向CSConfig添加一个清理函数。我已经完全删除了线程创建,并在任何使用数据库的线程终止之前调用清理。因此,我没有多余的线程。

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

但毕竟我的线少了两倍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15228371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档