private static List<Match> GetNamedRefs(string articleText)
{
List<Match> refsList = new List<Match>();
lock(GetNamedRefsQueueLock)
{
// For peformance, use cached result if available: articletext plus List matches
refsList = GetNamedRefsQueue.FirstOrDefault(q => q.Key.Equals(articleText)).Value;
if (refsList != null)
return refsList;
}
refsList = (from Match m in WikiRegexes.NamedReferencesIncludingCondensed.Matches(articleText) select m).ToList();
lock(GetNamedRefsQueueLock)
{
// cache new results, then dequeue oldest if cache full
GetNamedRefsQueue.Enqueue(new KeyValuePair<string, List<Match>>(articleText, refsList));
if (GetNamedRefsQueue.Count > 10)
GetNamedRefsQueue.Dequeue();
}
return refsList;
}