繁体   English   中英

DBContext多线程

[英]DBContext multi-threading

我有一个我在VS2010中构建的网站,它使用的是MVC3(Razor)

我使用DBContexts访问数据库,我的连接字符串是:

<add name="SystemDBContext"
connectionString="Data Source=|DataDirectory|System.sdf"
providerName="System.Data.SqlServerCe.4.0" />

我想要一个游戏循环,所以我在Application_Start中启动了一个新线程,它使用DBContext循环和访问数据库。

似乎正在发生的是循环使用DBContext并锁定db文件,然后每当您尝试从网站本身的DBContext进行更改时,该文件都在使用中。

不是在我声明DBContext的时候,每当我尝试使用DBContext执行某种搜索或更新时就会发生这种情况。

这是我的Global.asax

    protected void Application_Start()
    {
        ...
        Manager m = new Manager();
        Thread t = new Thread(m.Start);
        t.Start();
    }

我的一个控制器的一部分:

public class myController : Controller
{
    private SystemDBContext db = new SystemDBContext();


    public ViewResult Index()
    {
        var engines = db.Engines.Include(e => e.state);
        return View(engines.ToList());
    }
    ...

我的循环看起来像这样:

public class Manager
{
    public void Start()
    {
        while (true)
        {
            SystemDBContext db = new SystemDBContext();
            var query = from ...
        }
        ...

这样做的最佳做法是什么? 我一直在考虑Singletons,Locks或Synclocks,调整连接字符串以允许多个附加到数据库文件,或让我的循环请求一个执行更新的网页。

有任何想法吗?

似乎正在发生的是循环使用DBContext并锁定db文件,然后每当您尝试从网站本身的DBContext进行更改时,该文件都在使用中。

回去阅读文档? 它说WinCE的部分不是多线程的服务器。 请改用SQL Server - Express是免费的 CE用于有限的可伸缩性项目,单线程访问。

这样做的最佳做法是什么?

使用适当的数据库服务器。 CE是非常有问题的,特别是如果你一直启动/停止数据库引擎,这会导致很多低效的磁盘访问。

SQL Server正是为此完成的,正如我所说的 - Express很便宜。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM