1

MVC3(Razor)を使用しているVS2010で構築したWebサイトがあります

DBContextsを使用してデータベースにアクセスします。接続文字列は次のとおりです。

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

ゲームループが必要なので、Application_Startで新しいスレッドを開始しました。このスレッドは、DBContextを使用してデータベースをループしてアクセスします。

ループがDBContextを使用してdbファイルをロックし、Webサイト自体の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 ...
        }
        ...

これを行うためのベストプラクティスは何ですか?シングルトン、ロック、または同期ロックについて考えていました。データベースファイルに複数の接続を許可するように接続文字列を調整したり、ループで更新を行うWebページを要求したりしています。

何か案は?

4

1 に答える 1

4

ループがDBContextを使用してdbファイルをロックし、Webサイト自体のDBContextから変更を加えようとすると、ファイルが使用されているように見えます。

ドキュメントの読みに戻りますか?WinCEが複数のスレッドのサーバーではないと書かれている部分。代わりにSQLServerを使用してください-Expressは無料です。CEは、拡張性が制限されたアイテム、シングルスレッドアクセス用です。

これを行うためのベストプラクティスは何ですか?

適切なデータベースサーバーを使用してください。CEは、特にデータベースエンジンを常に起動/停止する場合、非常に問題があり、その結果、多くの非効率的なディスクアクセスが発生します。

SQL Serverはまさにそのために行われ、私が言ったように-Expressは安価です。

于 2012-06-05T18:16:41.247 に答える