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

您可以在一个 sql 请求中更新这一切。Linq-to-sql 具有 SubmitChanges 方法,可在上下文中提交所有更改。因此,您可以在循环中累积对 hero 的更改并在循环后提交它们。

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 是您的更新方法,但不包括 SubmitChanges。

于 2012-11-04T04:24:54.173 回答