.net - 在 C# dll 中缓存数据的最佳方法是什么?

标签 .net file dll caching dependencies

我编写了一个可以以多种方式使用的 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/

相关文章:

c++ - 多个 C++ .lib 项目到 .dll 项目,Lua 崩溃!

c# - 什么时候使用 C# 类库 (.dll) 合适?

c# - 忽略上下文更新中的空值

c# - 在 C# 中,如何使用十六进制值创建 System.Drawing.Color 对象?

c# - 努力估计 : using C/Win32 or learning C#/. NET

c++ - 为什么 basic_ifstream 显示错误的结果?

java - 在文本文件中追加数据在 Android 应用程序中不起作用

android 如何使用我的应用程序打开外部文件

c# - File.Exists() 返回 false,但不在调试中

c++ - 在 Windows 上同时使用 .so 和 .dll