private void ClearFileFromCache(SimpleVirtualFile file)
 {
     Dictionary<string, SimpleVirtualFile> virtualFiles;
     if (!_virtualFileCache.TryGetValue(file.RemoteAddress, out virtualFiles)) return;
     if (virtualFiles.ContainsKey(file.VirtualPath)) virtualFiles.Remove(file.VirtualPath);
     if (virtualFiles.Count == 0) _virtualFileCache.Remove(file.RemoteAddress);
 }
 private bool CacheAndCheckVirtual(string path)
 {
     if (!_extensions.Any(path.Contains)) return false;
     string remoteAddress;
     if (!TryGetRemoteAddress(HttpContext.Current, out remoteAddress)) return false;
     Dictionary<string, SimpleVirtualFile> virtualFiles;
     if (_virtualFileCache.TryGetValue(remoteAddress, out virtualFiles) && virtualFiles.ContainsKey(path)) return true;
     var simpleVFile = new SimpleVirtualFile(remoteAddress, path.TrimStart('~'));
     if (!simpleVFile.Exists) return false;
     if (virtualFiles != null) virtualFiles.Add(path, simpleVFile);
     else _virtualFileCache.Add(remoteAddress, new Dictionary<string, SimpleVirtualFile> { { path, simpleVFile } });
     return true;
 }
 private bool TryGetVirtualFile(HttpContext context, string virtualPath, out SimpleVirtualFile file)
 {
     file = null;
     string remoteAddress;
     if (!TryGetRemoteAddress(context, out remoteAddress)) return false;
     Dictionary<string, SimpleVirtualFile> virtualFiles;
     if (!_virtualFileCache.TryGetValue(remoteAddress, out virtualFiles) || !virtualFiles.ContainsKey(virtualPath)) return false;
     file = virtualFiles[virtualPath];
     return true;
 }