簡體   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