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;
}