Beispiel #1
0
        public void SaveToDB()
        {
            lock (dbLock)
            {
                DateTime start = DateTime.Now;
                using (var db = new ZkDataContext())
                {
                    HashSet <int> processedPlayers = new HashSet <int>();
                    int           deleted          = 0;
                    int           added            = 0;
                    foreach (var accountRating in db.AccountRatings.Where(x => x.RatingCategory == category))
                    {
                        if (!playerRatings.ContainsKey(accountRating.AccountID))
                        {
                            deleted++;
                            db.AccountRatings.DeleteOnSubmit(accountRating);
                            continue;
                        }
                        processedPlayers.Add(accountRating.AccountID);
                        if (Math.Abs(playerRatings[accountRating.AccountID].LadderElo - accountRating.LadderElo ?? 9999) > 0.5 ||
                            Math.Abs(playerRatings[accountRating.AccountID].RealElo - accountRating.RealElo) > 0.5 ||
                            accountRating.IsRanked != (playerRatings[accountRating.AccountID].Rank < int.MaxValue))
                        {
                            accountRating.UpdateFromRatingSystem(playerRatings[accountRating.AccountID]);
                        }
                    }
                    foreach (int player in playerRatings.Keys)
                    {
                        if (!processedPlayers.Contains(player))
                        {
                            var accountRating = new AccountRating(player, category);
                            accountRating.UpdateFromRatingSystem(playerRatings[player]);
                            db.AccountRatings.InsertOnSubmit(accountRating);
                            added++;
                        }
                    }

                    db.SaveChanges();
                    Trace.TraceInformation("WHR " + category + " Ratings saved to DB in " + DateTime.Now.Subtract(start).TotalSeconds + " seconds, " + added + " entries added, " + deleted + " entries removed, " + (GC.GetTotalMemory(false) / (1 << 20)) + "MiB total memory allocated");
                }
            }
        }
Beispiel #2
0
 public void SaveToDB(IEnumerable <int> players)
 {
     lock (dbLock)
     {
         using (var db = new ZkDataContext())
         {
             foreach (int player in players)
             {
                 var accountRating = db.AccountRatings.Where(x => x.RatingCategory == category && (x.AccountID) == player).FirstOrDefault();
                 if (accountRating == null)
                 {
                     accountRating = new AccountRating(player, category);
                     accountRating.UpdateFromRatingSystem(playerRatings[player]);
                     db.AccountRatings.InsertOnSubmit(accountRating);
                 }
                 else
                 {
                     accountRating.UpdateFromRatingSystem(playerRatings[player]);
                 }
             }
             db.SaveChanges();
         }
     }
 }