private static void CheckForChunkDataCacheTimeouts()
{
lock (chunkDataCacheLocker)
{
if ((DateTime.Now - lastChunkCacheCleanup).TotalSeconds > ChunkCacheDataCleanupIntervalSecs)
{
if (DFS.loggingEnabled) DFS._DFSLogger.Trace("Starting ChunkDataCache cleanup.");
int removedCount = 0;
ShortGuid[] peerKeys = chunkDataCache.Keys.ToArray();
for (int i = 0; i < peerKeys.Length; i++)
{
string[] dataSequenceKeys = chunkDataCache[peerKeys[i]].Keys.ToArray();
for (int k = 0; k < dataSequenceKeys.Length; k++)
{
if ((DateTime.Now - chunkDataCache[peerKeys[i]][dataSequenceKeys[k]].TimeCreated).TotalSeconds > ChunkCacheDataTimeoutSecs)
{
//If we have timed out data we will remove it
chunkDataCache[peerKeys[i]].Remove(dataSequenceKeys[k]);
removedCount++;
}
}
//If there is no longer any data for a particular peer we remove the peer entry
if (chunkDataCache[peerKeys[i]].Count == 0)
chunkDataCache.Remove(peerKeys[i]);
}
if (DFS.loggingEnabled) DFS._DFSLogger.Trace("Completed ChunkDataCache cleanup having removed " + removedCount + " items.");
lastChunkCacheCleanup = DateTime.Now;
}
}
}