0

私はゲーム用のサーバーを作成しています。みんなの秒を保存する必要があるので、作成しました:-

private static void SubmitChanges() {
    while(true) {
        try {
            using(GameDBDataContext db = new GameDBDataContext()){
                foreach(IHero hero in world.Entities.BattleEntities.OnlineHeros.Values) {
                    hero.Update(db);
                }
            }
        } catch(Exception ex) {
            Console.WriteLine(ex.ToString());
        }
        Thread.Sleep(1000);
    }
}

それでいいですか?オンラインのヒーローが500人くらいいればいいのでは?

編集:所要時間を確認中:-

private void UpdateDatabase() {
    try {
        using(GameDBDataContext db = new GameDBDataContext()) {
            foreach(IHero hero in world.Entities.BattleEntities.OnlineHeros.Values) {
                DateTime now = DateTime.Now;
                hero.Update(db);
                DateTime after = DateTime.Now;
                Console.WriteLine((now - after).Milliseconds);
            }
        }
    } catch(Exception ex) {
        Console.WriteLine(ex.ToString());
    }
}

結果 :-

-13
-10
-13
-26
-19
-24
-25
-19
-27
-22
-19
-26
-25
-21
-24
-22
4

1 に答える 1

0

これはすべて 1 つの SQL 要求で更新できます。Linq-to-sql にはメソッド SubmitChanges があり、コンテキスト内のすべての変更をコミットします。したがって、ヒーローの変更をループで蓄積し、ループ後に送信できます。

private static void SubmitChanges() 
{
    while(true) {
        try {
            using(GameDBDataContext db = new GameDBDataContext()){
                foreach(IHero hero in world.Entities.BattleEntities.OnlineHeros.Values) {
                    hero.UpdateRecord(db);
                }
                db.SubmitChanges();
            }
        } catch(Exception ex) {
            Console.WriteLine(ex.ToString());
        }
        Thread.Sleep(1000);
    }
}

UpdateRecord は Update メソッドですが、SubmitChanges は除外します。

于 2012-11-04T04:24:54.173 に答える