如何使用FileSystemWatcher更改缓存数据?

时间:2012-03-21 12:14:08

标签: c# .net oop filesystems

我的应用程序从缓存中读取DLL数据。但如果任何开发人员更改DLL,则DllCaching必须更改。所以我一直在使用FileSystemWatcher来检测DLL的任何变化。

我的系统观察器机制如下:这个项目在asp.net


    public void CreateFileWatcher(string path)
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = path;

            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.IncludeSubdirectories = true;
            watcher.Filter = "*.dll";

            // Add event handlers.
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            watcher.Renamed += new RenamedEventHandler(OnChanged);

            // Begin watching.
            watcher.EnableRaisingEvents = true;
        }

   private static void OnChanged(object source, FileSystemEventArgs e)
        {

             //FillCache
}

Button1_Click
{
CreateFileWatcher(@"C:/data")

// like that:
    myarray = CachData
}

如何制作?如何在Dll更改时加载dll(再次加载)。

2 个答案:

答案 0 :(得分:2)

如果在应用程序中使用缓存,如何清除缓存是一个障碍,当您实现清除缓存的自定义逻辑时,它变得很难。如果您使用EnterpriseLibrary缓存,我们可以在向缓存添加项目时具有依赖关系。对此文件的任何更改都将清除缓存。

以下是示例代码。同样的重载也可用于asp.net缓存。

FileDependency cacheFileDependency = new FileDependency("\\mynetworkpath\abc.txt");
cacheMgr.Add(cacheName, cacheValueList, 
             Microsoft.Practices.EnterpriseLibrary.Caching.CacheItemPriority.Normal,
             null, cacheFileDependency);

答案 1 :(得分:-1)

我想,你不了解ASP.NET的工作方式。这是我的愿景,希望它能帮助您理解问题并找到合适的解决方案。

我在服务器端控件中实例化FileSystemWatcher,这并不意味着单实例使用,这只意味着特定客户端访问了您的Web表单或将被授予的内容(实际上并非真实)至少一个线。这也意味着IIS线程的数量可能少于客户端所需的数量。

此外,这也意味着您无法有效地使用Singleton模式,以及会话存储或cookie(在Web-farm异步调用的情况下,它将违反法律)。

唯一真正有效的选择是实现Web服务,并累积对指定服务器路径(不是物理路径,而是IIS(或任何Web服务器,fe mono)路径)的更改,删除或添加,即\ etc \ bin \ dlls \,可以使用http utils BCL课程有效地转换为物理服务器路径,并定期获取所需信息。

如果您愿意直接获取无法获得的此类信息,因为在监视实例之间始终存在间隙,此文件夹将处于不受控制状态,即f.e。一个客户端线程正在关闭,并且在下一个客户端连接到服务器之前,例如当用户在页面上上传一个大文件,然后调用F5或刷新页面,但页面进入过期状态(过期状态意味着) ,客户端页面的有意义状态丢失,可能是服务器上的客户端消费者线程已完成其工作,或者转到队列中的下一个客户端。