我正在尝试以编程方式从其他服务器清除应用程序的缓存。我在应用程序中看到很多关于清除它的帖子,但不是这样的。
如果您触摸Web.Config
文件,它将回收应用程序池,导致应用程序清除。假设主机应用程序具有访问权限,我可以通过编程方式执行此操作。但是想知道是否有更好的方法来清除所有缓存项而不是重新启动应用程序池。
答案 0 :(得分:0)
我想说清除WHOLE缓存时需要考虑几点:
话虽如此,如果你想清除缓存中的每个条目(假设你使用System.Web.Caching
方法这样做),你可以引入一些类似的代码:
List<string> keys = new List<string>();
IDictionaryEnumerator enumerator = Cache.GetEnumerator();
while (enumerator.MoveNext()){
keys.Add(enumerator.Key.ToString());
} // end while
for (int i = 0; i < keys.Count; i++) {
Cache.Remove(keys[i]);
} // end for loop
然后,您可以通过网址公开上述代码(例如:http://example.com/admin/refresh-cache
)。
这将允许您以编程方式从其他应用程序或批处理文件中清除缓存,或者您可以直接从URL访问它。
要详细说明上面的第一个项目符号,.NET缓存机制(其中有很多种类:http://msdn.microsoft.com/en-us/library/dd997357(v=vs.110).aspx)都有自己的内置过期功能。如果您发现自己处于要清除整个缓存的位置,则可能表明您应该A)提高缓存保留值或B)回收应用程序池,因为这将确保应用程序用户更安全的转换。请记住,当应用程序运行时,任何在缓存中放置项目的内容在您清除所有内容时可能仍会尝试执行此操作。
另一个需要考虑的选择是使用缓存管理解决方案,例如AppFabric(http://msdn.microsoft.com/en-us/library/ff383731(v=azure.10).aspx)。