CClash.DirectCompilerCacheServer.GetHashes C# (CSharp) Method

GetHashes() public method

public GetHashes ( IEnumerable fnames ) : DataHash>.Dictionary
fnames IEnumerable
return DataHash>.Dictionary
        public override Dictionary<string, DataHash> GetHashes(IEnumerable<string> fnames)
        {
            if (hashcache.Count > 20000)
            {
                lock (hashcache)
                {
                    hashcache.Clear();
                }
            }

            var unknown = new List<string>();
            var rv = new Dictionary<string, DataHash>();
            foreach (var n in fnames)
            {
                var x = n.ToLower();
                lock (hashcache)
                {
                    if (hashcache.ContainsKey(x))
                    {
                        rv[x] = hashcache[x];
                    }
                    else
                    {
                        unknown.Add(x);
                    }
                }
            }

            if (unknown.Count > 0)
            {
                Logging.Emit("hash {0}/{1} new/changed files", unknown.Count, fnames.Count());
                var tmp = base.GetHashes(fnames);
                lock (hashcache)
                {
                    foreach (var filename in tmp.Keys)
                    {
                        var flow = filename.ToLower();
                        hashcache[flow] = tmp[filename];
                        rv[flow] = tmp[filename];
                        WatchFile(flow);
                    }
                }
            }

            return rv;  
        }