我编写了一个可以以多种方式使用的 DLL(被 ASP.NET 网站、WinForms 等引用)。它需要从几个分隔文件加载数据,这些文件将半定期自动更新。出于性能原因,我将数据加载到静态对象(通用列表)中,并且只想在数据更改时返回到文件。 (数据量不会占用不合理的内存量,但每次访问时从文件中读取确实需要很长时间)。我曾尝试使用 FileSystemWatcher,但事实证明这是不可靠的 - 它会定期错过文件更新。由于我不能指望在网站内运行的 DLL,ASP.NET CacheDependency 选项似乎不合适。有没有人找到解决这类事情的好方法?
最佳答案
ASP.NET 缓存和关联的 CacheDependency 不依赖于 ASP.NET、IIS 或 Web 服务器。您可以在这种确切情况下自由使用它。与企业库缓存应用程序块相比,它需要更少的努力才能开始工作,并且使用和记录更广泛。
一些额外的引用:
http://aspalliance.com/1705_A_New_Approach_to_HttpRuntimeCache_Management.all
如果您想在 DLL 中使用 ASP.NET 缓存逻辑,只需将它包装起来并像这样引用它:
using System.Web.Caching;
...
var cache = HttpRuntime.Cache;
cache.Insert("foo", foo);
这段代码以及您想添加到其中的任何 FileSystemDependency 都将在您的库中同样有效,无论它是在 web、winform、控制台还是服务上下文中运行。
如果您想确保使用与网络相同的缓存,您也可以这样做,但它是可选的:
HttpContext context = HttpContext.Current;
if(context != null)
{
_cache = context.Cache;
}
else
{
_cache = HttpRuntime.Cache;
}
关于.net - 在 C# dll 中缓存数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/463312/