Skip to content

Commit 9daa649

Browse files
committed
always properly dispose
1 parent 0e2972d commit 9daa649

2 files changed

Lines changed: 75 additions & 62 deletions

File tree

ZkData/Ef/WHR/RatingSystems.cs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,26 @@ public static void Init()
3030
{
3131
try
3232
{
33-
ZkDataContext data = new ZkDataContext();
34-
for (int year = 10; year > 0; year--)
33+
using (ZkDataContext data = new ZkDataContext())
3534
{
36-
DateTime minStartTime = DateTime.Now.AddYears(-year);
37-
DateTime maxStartTime = DateTime.Now.AddYears(-year + 1);
38-
foreach (SpringBattle b in data.SpringBattles
39-
.Where(x => x.StartTime > minStartTime && x.StartTime < maxStartTime)
40-
.Include(x => x.ResourceByMapResourceID)
41-
.Include(x => x.SpringBattlePlayers)
42-
.Include(x => x.SpringBattleBots)
43-
.AsNoTracking()
44-
.OrderBy(x => x.StartTime))
35+
for (int year = 10; year > 0; year--)
4536
{
46-
ProcessBattle(b);
37+
DateTime minStartTime = DateTime.Now.AddYears(-year);
38+
DateTime maxStartTime = DateTime.Now.AddYears(-year + 1);
39+
foreach (SpringBattle b in data.SpringBattles
40+
.Where(x => x.StartTime > minStartTime && x.StartTime < maxStartTime)
41+
.Include(x => x.ResourceByMapResourceID)
42+
.Include(x => x.SpringBattlePlayers)
43+
.Include(x => x.SpringBattleBots)
44+
.AsNoTracking()
45+
.OrderBy(x => x.StartTime))
46+
{
47+
ProcessBattle(b);
48+
}
4749
}
50+
Initialized = true;
51+
whr.Values.ForEach(w => w.UpdateRatings());
4852
}
49-
Initialized = true;
50-
whr.Values.ForEach(w => w.UpdateRatings());
5153
}
5254
catch (Exception ex)
5355
{

ZkData/Ef/WHR/WholeHistoryRating.cs

Lines changed: 59 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,19 @@ public List<Account> GetTopPlayers(int count)
112112
{
113113
if (count > 200)
114114
{
115-
ZkDataContext db = new ZkDataContext();
116-
laddersCache = db.Accounts.OrderByDescending(x => x.AccountRatings.Where(r => r.RatingCategory == category).Select(r => r.Elo).DefaultIfEmpty(-1).FirstOrDefault()).Take(count).ToList();
115+
using (ZkDataContext db = new ZkDataContext())
116+
{
117+
laddersCache = db.Accounts.OrderByDescending(x => x.AccountRatings.Where(r => r.RatingCategory == category).Select(r => r.Elo).DefaultIfEmpty(-1).FirstOrDefault()).Take(count).ToList();
118+
}
117119
}
118120
if (laddersCache.Count < count)
119121
{
120122

121-
ZkDataContext db = new ZkDataContext();
122-
List<int> retIDs = topPlayers.Take(count).ToList();
123-
laddersCache = db.Accounts.Where(a => retIDs.Contains(a.AccountID)).OrderByDescending(x => x.AccountRatings.Where(r => r.RatingCategory == category).Select(r => r.Elo).DefaultIfEmpty(-1).FirstOrDefault()).ToList();
123+
using (ZkDataContext db = new ZkDataContext())
124+
{
125+
List<int> retIDs = topPlayers.Take(count).ToList();
126+
laddersCache = db.Accounts.Where(a => retIDs.Contains(a.AccountID)).OrderByDescending(x => x.AccountRatings.Where(r => r.RatingCategory == category).Select(r => r.Elo).DefaultIfEmpty(-1).FirstOrDefault()).ToList();
127+
}
124128
}
125129
return laddersCache.Take(count).ToList();
126130
}
@@ -130,15 +134,18 @@ public List<Account> GetTopPlayers(int count, Func<Account, bool> selector)
130134
lock (updateLockInternal)
131135
{
132136
int counter = 0;
133-
ZkDataContext db = new ZkDataContext();
134137
List<Account> retval = new List<Account>();
135-
foreach (var pair in sortedPlayers)
138+
139+
using (ZkDataContext db = new ZkDataContext())
136140
{
137-
Account acc = db.Accounts.Where(a => a.AccountID == pair.Value).FirstOrDefault();
138-
if (playerRatings[acc.AccountID].Rank < int.MaxValue && selector.Invoke(acc))
141+
foreach (var pair in sortedPlayers)
139142
{
140-
if (counter++ >= count) break;
141-
retval.Add(acc);
143+
Account acc = db.Accounts.Where(a => a.AccountID == pair.Value).FirstOrDefault();
144+
if (playerRatings[acc.AccountID].Rank < int.MaxValue && selector.Invoke(acc))
145+
{
146+
if (counter++ >= count) break;
147+
retval.Add(acc);
148+
}
142149
}
143150
}
144151
return retval;
@@ -247,22 +254,24 @@ public void SaveToDB(IEnumerable<int> players)
247254
lock (dbLock)
248255
{
249256

250-
var db = new ZkDataContext();
251-
foreach (int player in players)
257+
using (var db = new ZkDataContext())
252258
{
253-
var accountRating = db.AccountRatings.Where(x => x.RatingCategory == category && x.AccountID == player).FirstOrDefault();
254-
if (accountRating == null)
255-
{
256-
accountRating = new AccountRating(player, category);
257-
accountRating.UpdateFromRatingSystem(playerRatings[player]);
258-
db.AccountRatings.InsertOnSubmit(accountRating);
259-
}
260-
else
259+
foreach (int player in players)
261260
{
262-
accountRating.UpdateFromRatingSystem(playerRatings[player]);
261+
var accountRating = db.AccountRatings.Where(x => x.RatingCategory == category && x.AccountID == player).FirstOrDefault();
262+
if (accountRating == null)
263+
{
264+
accountRating = new AccountRating(player, category);
265+
accountRating.UpdateFromRatingSystem(playerRatings[player]);
266+
db.AccountRatings.InsertOnSubmit(accountRating);
267+
}
268+
else
269+
{
270+
accountRating.UpdateFromRatingSystem(playerRatings[player]);
271+
}
263272
}
273+
db.SaveChanges();
264274
}
265-
db.SaveChanges();
266275
}
267276
}
268277

@@ -271,37 +280,39 @@ public void SaveToDB()
271280
lock (dbLock)
272281
{
273282
DateTime start = DateTime.Now;
274-
var db = new ZkDataContext();
275-
HashSet<int> processedPlayers = new HashSet<int>();
276-
int deleted = 0;
277-
int added = 0;
278-
foreach (var accountRating in db.AccountRatings.Where(x => x.RatingCategory == category))
283+
using (var db = new ZkDataContext())
279284
{
280-
if (!playerRatings.ContainsKey(accountRating.AccountID))
281-
{
282-
deleted++;
283-
db.AccountRatings.DeleteOnSubmit(accountRating);
284-
continue;
285-
}
286-
processedPlayers.Add(accountRating.AccountID);
287-
if (Math.Abs(playerRatings[accountRating.AccountID].Elo - accountRating.Elo) > 1)
285+
HashSet<int> processedPlayers = new HashSet<int>();
286+
int deleted = 0;
287+
int added = 0;
288+
foreach (var accountRating in db.AccountRatings.Where(x => x.RatingCategory == category))
288289
{
289-
accountRating.UpdateFromRatingSystem(playerRatings[accountRating.AccountID]);
290+
if (!playerRatings.ContainsKey(accountRating.AccountID))
291+
{
292+
deleted++;
293+
db.AccountRatings.DeleteOnSubmit(accountRating);
294+
continue;
295+
}
296+
processedPlayers.Add(accountRating.AccountID);
297+
if (Math.Abs(playerRatings[accountRating.AccountID].Elo - accountRating.Elo) > 1)
298+
{
299+
accountRating.UpdateFromRatingSystem(playerRatings[accountRating.AccountID]);
300+
}
290301
}
291-
}
292-
foreach (int player in playerRatings.Keys)
293-
{
294-
if (!processedPlayers.Contains(player))
302+
foreach (int player in playerRatings.Keys)
295303
{
296-
var accountRating = new AccountRating(player, category);
297-
accountRating.UpdateFromRatingSystem(playerRatings[player]);
298-
db.AccountRatings.InsertOnSubmit(accountRating);
299-
added++;
304+
if (!processedPlayers.Contains(player))
305+
{
306+
var accountRating = new AccountRating(player, category);
307+
accountRating.UpdateFromRatingSystem(playerRatings[player]);
308+
db.AccountRatings.InsertOnSubmit(accountRating);
309+
added++;
310+
}
300311
}
301-
}
302312

303-
db.SaveChanges();
304-
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");
313+
db.SaveChanges();
314+
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");
315+
}
305316
}
306317
}
307318

0 commit comments

Comments
 (0)