@@ -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