private static void CalculateScore(string resource, Slide s1) { try { lock (scoreLock) { List <Slide> slides = slideShow.GetRelevantSlides(s1); foreach (var s2 in slides) { if (s2.id != s1.id) { if (scores == null) { return; } string key = string.Format("{0} {1}", Math.Min(s2.id, s1.id), Math.Max(s2.id, s1.id)); int score = Slide.Score(s1, s2); if (score < MIN_CACHED_SCORE) { continue; } scores[key] = score; Console.Write("slides {0} - calc. scores {1} \t\r", slideShow.index, scores.Count); if (scores.Count >= MAX_CALC_SCORES) { PersistCalculatesHiScores(string.Format("{0}.hiscores.{1}", resource, scoreSetIndex++)); scores.Clear(); } } } } } catch (Exception ex) { Console.Error.WriteLine(ex); } }