簡體   English   中英

每秒新的DataContext

[英]New DataContext per second

我正在為游戲制作服務器,我需要保存每個人的第二個,所以我做了:-

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

您可以在一個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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM