跳至页脚内容
.NET 帮助

Microsoft.Extensions.Caching.Memory 示例(带PDF)在C#中

为了响应式和有效地构建应用程序,.NET 应用程序通常需要优化方法。 缓存是一种强大的方法,涉及将经常请求的材料临时存储在分布式缓存中,以便更快地检索。 这种策略可以减少处理时间和服务器负载,从而显著提高应用程序性能。 此外,可以实施性能计数器来监控和增强缓存系统。

缓存在这种情况下是一种强大的优化策略。 Microsoft.Extensions.Caching.Memory为.NET应用程序提供了一种高效的内存中对象缓存解决方案。 如果您战略性地使用MemoryCache缓存和IronPDF,您的PDF应用程序将运行和响应得更快。

我们探讨如何将Microsoft.Extensions.Caching.Memory C# 示例与 IronPDF 高效集成。 在本文中,我们将讨论缓存的优势在于IronPDF HTML 转 PDF 转换过程,提供一些有用的实现技巧,并提供详细的逐步讲解,配置您 IronPDF 程序中的缓存。 完成后,您将具备开发高效直观的PDF应用程序所需的技能和资源。

Microsoft.Extensions.Caching.Memory:.NET 中缓存的基础

缓存是一种在许多高性能.NET应用程序中使用的方法,它将经常访问的数据存储在内存中以便快速检索。 Microsoft.Extensions是众多可用的缓存选项之一。 Caching.Memory是一个特别强大和适应性强的选项。 此库是更大的Microsoft.Extensions.Caching命名空间的一部分,提供了一种简单而有效的内存中缓存方法。

"Microsoft.Extensions.Caching.Memory"中的关键类型

IMemoryCache

  • 该接口代表了使用内存缓存的基本功能。 它提供了管理缓存条目、添加、检索和删除它们的方法。
  • 请将其视为您缓存进程的主要入口点。

MemoryCache

  • IMemoryCache 的实际实现就在此类中。 它为缓存项提供管理和实际的内存存储。
  • 在 ASP.NET Core 应用程序中通常使用依赖注入来检索MemoryCache实例。

MemoryCacheEntryOptions

使用此类可以为特定的缓存项指定配置设置。 这些设置调控以下事项:

  • 过期:您可以配置滑动过期窗口(如果条目在特定时间间隔内未访问则过期)或绝对过期时间(条目自动过期)。
  • 优先级:这会影响缓存满时是否要驱逐项目。优先级较高的条目被移除的可能性较低。
  • 驱逐后回调:这允许您微调处理数据过期的逻辑。 在关键数据需要刷新、资源管理和日志记录的情况下,这尤其有用。

CacheEntry

  • 在缓存中,此类型表示单个条目。 它提供方法和属性以检索大小细节、过期设置和缓存值。
  • 从本质上讲,它包含了有关保存在缓存中的特定数据片段的所有信息。

ICacheEntry

  • 该接口概述可以在缓存项上执行的基本活动,尽管对于基本的缓存操作并非必需。 它包含有关如何检索值和过期细节的说明。 这种情况更普遍地出现在需要检索字符串键的场景中。
  • 此接口由 CacheEntry 类实现,提供了这些功能的实用实现。

安装和配置 Microsoft.Extensions.Caching.Memory

在应用程序启动期间,内存用于在 ASP.NET Core 应用程序的服务集合中配置缓存服务。 以下是配置了Microsoft.Extensions.Caching.Memory的 ASP.NET Core 应用程序:

安装所需的 NuGet 包

首先,确保为您的项目安装了Microsoft.Extensions.Caching.Memory。 您可以使用 NuGet 包管理器控制台通过命令安装它:

Install-Package Microsoft.Extensions.Caching.Memory

或者我们可以使用 NuGet 包管理器来安装这个包:

Microsoft.Extensions.Caching.Memory 示例(包含 PDF)在 C# 中:图 1 - 在 NuGet 包管理器中搜索 Microsoft.Extensions.Caching.Memory 并安装

在 Startup.cs 中配置服务

通过打开 Startup.cs 文件,导航到您的 ASP.NET Core 应用程序中的ConfigureServices方法。要设置内存缓存服务,添加以下代码:

using Microsoft.Extensions.Caching.Memory;
public void ConfigureServices(IServiceCollection services)
{
    // Add memory cache service
    services.AddMemoryCache();
    // Other service configurations...
}
using Microsoft.Extensions.Caching.Memory;
public void ConfigureServices(IServiceCollection services)
{
    // Add memory cache service
    services.AddMemoryCache();
    // Other service configurations...
}
$vbLabelText   $csharpLabel

通过这段代码,内存缓存服务对象被添加到应用程序的服务集合并进行配置。 内存缓存系统服务通过AddMemoryCache函数使用其默认配置进行注册。

注入 IMemoryCache

设置缓存存储后,任何需要缓存的类或组件都可以将 IMemoryCache 接口注入其中。 例如,在控制器或服务类中:

public class MyService
{
    private readonly IMemoryCache _cache;
    public MyService(IMemoryCache cache)
    {
        _cache = cache;
    }
    // Use _cache to perform caching operations...
}
public class MyService
{
    private readonly IMemoryCache _cache;
    public MyService(IMemoryCache cache)
    {
        _cache = cache;
    }
    // Use _cache to perform caching operations...
}
$vbLabelText   $csharpLabel

IMemoryCache 接口提供了从内存缓存和检索数据的方法。

配置缓存选项

通过设置缓存参数,您可以更改内存缓存的行为,包括大小限制、缓存条目驱逐策略和缓存值过期规则。 以下是设置缓存选项的示例:

public void ConfigureServices(IServiceCollection services)
{
    // Configure cache options
    services.AddMemoryCache(options =>
    {
        options.SizeLimit = 1024; // Set the maximum size limit for the cache
        options.CompactionPercentage = 0.75; // Set the percentage of memory to free up when the cache size exceeds the limit
        options.ExpirationScanFrequency = TimeSpan.FromMinutes(5); // Set how often the cache should scan for expired items
    });
    // Other service configurations...
}
public void ConfigureServices(IServiceCollection services)
{
    // Configure cache options
    services.AddMemoryCache(options =>
    {
        options.SizeLimit = 1024; // Set the maximum size limit for the cache
        options.CompactionPercentage = 0.75; // Set the percentage of memory to free up when the cache size exceeds the limit
        options.ExpirationScanFrequency = TimeSpan.FromMinutes(5); // Set how often the cache should scan for expired items
    });
    // Other service configurations...
}
$vbLabelText   $csharpLabel

根据应用程序的规格修改设置。

这些说明将帮助您在 ASP.NET Core 应用程序中配置 Microsoft.Extensions.Caching.Memory,使其可以通过存储和检索经常访问的数据来更快更高效地运行。

开始

什么是 IronPDF?

使用著名的 .NET 库 IronPDF,程序员可以在 .NET 应用程序中生成、编辑和显示 PDF 文档。 从 HTML 内容、图像或原始数据创建 PDF 是它提供的许多功能之一。 其他功能包括向现有 PDF 文档添加文本、图像和形状,将 HTML 页面转换为 PDF,以及从 PDF 提取文本和图像。

以下是 IronPDF 的一些功能:

  • 从 HTML、PNG 和原始数据创建 PDF。
  • 从 PDF 中提取图像和文本。
  • 添加 PDF 页眉、页脚和水印。
  • 带有密码保护和加密的PDF文档。
  • 填写表单和数字签名功能。

安装 NuGet 包

在您的项目中,确保安装了 IronPDF 包。 可以使用NuGet包管理器控制台来安装它:

Install-Package IronPdf

打开您的 ASP.NET Core 应用程序,把Startup.cs文件访问到ConfigureServices函数。 要配置 IronPDF,请添加以下代码。

using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
    // Configure IronPDF
    services.AddSingleton<HtmlToPdf>();
    // Other service configurations...
}
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
    // Configure IronPDF
    services.AddSingleton<HtmlToPdf>();
    // Other service configurations...
}
$vbLabelText   $csharpLabel

通过将 IronPDF 的 HtmlToPdf 服务配置为单例,确保应用程序只创建和使用 HtmlToPdf 的一个实例。

Microsoft.Extensions.Caching.Memory与 IronPDF 一起使用

在.NET应用程序中,Microsoft.Extensions.Caching.Memory提供了一种存储频繁请求的数据以便更快速检索的实用方式。

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using System.Net;
using System.Net.Http.Headers;
using IronPdf;

namespace DemoWebApplication.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class DemoController : ControllerBase
    {
        private readonly IMemoryCache _cache;
        private readonly HtmlToPdf _htmlToPdf;
        private readonly ILogger<DemoController> _logger;

        public DemoController(ILogger<DemoController> logger, IMemoryCache cache, HtmlToPdf htmlToPdf)
        {
            _logger = logger;
            _cache = cache;
            _htmlToPdf = htmlToPdf;
        }

        [HttpGet]
        public FileContentResult Generate()
        {
            string fileName = "Sample.pdf";
            var stream = GeneratePdf("Hello IronPDF");
            return new FileContentResult(stream, "application/octet-stream")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            // Object key
            string cacheKey = "GeneratedPdf";
            if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes))
            {
                // PDF not found in cache, generate it
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
                pdfBytes = pdfDocument.BinaryData;
                // Cache the generated PDF with a sliding expiration of 1 hour
                _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1));
            }
            return pdfBytes;
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using System.Net;
using System.Net.Http.Headers;
using IronPdf;

namespace DemoWebApplication.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class DemoController : ControllerBase
    {
        private readonly IMemoryCache _cache;
        private readonly HtmlToPdf _htmlToPdf;
        private readonly ILogger<DemoController> _logger;

        public DemoController(ILogger<DemoController> logger, IMemoryCache cache, HtmlToPdf htmlToPdf)
        {
            _logger = logger;
            _cache = cache;
            _htmlToPdf = htmlToPdf;
        }

        [HttpGet]
        public FileContentResult Generate()
        {
            string fileName = "Sample.pdf";
            var stream = GeneratePdf("Hello IronPDF");
            return new FileContentResult(stream, "application/octet-stream")
            {
                FileDownloadName = fileName
            };
        }

        private byte[] GeneratePdf(string htmlContent)
        {
            // Object key
            string cacheKey = "GeneratedPdf";
            if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes))
            {
                // PDF not found in cache, generate it
                var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
                pdfBytes = pdfDocument.BinaryData;
                // Cache the generated PDF with a sliding expiration of 1 hour
                _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1));
            }
            return pdfBytes;
        }
    }
}
$vbLabelText   $csharpLabel

我们导入了与.NET和ASP.NET相关的命名空间。Microsoft.Extensions.Caching.Memory。 我们创建了继承自 ControllerBaseDemoController 控制器。 此控制器将响应通过 HTTP 发送的查询。在控制器的构造函数中注入 IMemoryCache 的实例。

ASP.NET Core 提供依赖注入以控制服务的生命周期,包括内存缓存。 通过应用[HttpGet]属性,Generate方法被标记用于处理到从指定路线存储中发送的 HTTP GET 请求(/Demo)。 我们尝试使用给定的缓存键从缓存中获取 PDF 数据。 如果在缓存中找不到数据,我们会使用GeneratePdf函数创建新的PDF。

在多个应用程序服务器的情况下,请确保配置分布式缓存,以便跨所有服务器一致处理缓存。

要使用Microsoft.Extensions.Caching.Memory,请参考所提供的文档和示例代码以缓存数据并提高 ASP.NET Core 应用程序的性能。 实际上,您可以根据应用程序的需要调整过期策略、缓存键和缓存行为。 缓存生成成本高或经常被多线程访问的数据可以改善整体用户体验并大幅减少响应时间。

Microsoft.Extensions.Caching.Memory 示例(包含 PDF)在 C# 中:图 2 - 上述代码的示例输出

结论

综上所述,Microsoft.Extensions.Caching.Memory 可以用于增加 .NET 应用程序的可扩展性和性能,特别是那些基于 ASP.NET Core 框架的应用程序。 开发人员可以通过利用内存缓存来改善用户体验、减少延迟和优化数据访问。 无论是缓存参考数据、查询结果还是计算值,该库都提供了一个灵活且易于使用的API,用于开发针对特定应用程序需求的缓存策略。 通过采用缓存最佳实践并将 Microsoft.Extensions.Caching.Memory 添加到您的 .NET 应用程序中,您可以实现显著的速度提升和增强的应用程序响应能力。

通过利用 Microsoft.Extensions 功能,借助 IronPDF进行动态 PDF 创建以及Caching.Memory进行有效的数据缓存,.NET 开发人员可以极大地提高应用程序的速度。这种强大的结合使得开发人员可以轻松设计出高性能、可扩展且响应迅速的应用程序,通过减轻服务器负载、改善用户体验和消除处理开销。

IronPDF 可以以合理的价格购买,并且获取该包包括终身许可证。 该包物有所值,因为它从$799起,为多个系统提供一次性费用。 对于拥有许可证的用户,它提供全天候的在线工程帮助。 有关收费的详细信息,请访问 IronPDF 许可页面。 访问这个关于 Iron Software 的页面以了解有关 Iron Software 制作的产品的更多信息。

常见问题解答

Microsoft.Extensions.Caching.Memory 在 .NET 应用程序中的用途是什么?

Microsoft.Extensions.Caching.Memory 通过提供内存中对象缓存来增强 .NET 应用程序的性能。它将经常访问的数据存储在内存中以便快速检索,这在与 IronPDF 一起用于 PDF 操作时尤其有益。

缓存如何提高 .NET 中 PDF 处理的性能?

通过在内存中存储经常请求的 PDF 数据,缓存可以减少处理时间和服务器负载。当与像 IronPDF 这样的库集成时,它可以加快 PDF 创建和操作,提高整体应用程序的速度和响应能力。

如何在 ASP.NET Core 应用程序中实现内存缓存?

在 ASP.NET Core 中,您可以通过在 Startup.csConfigureServices 方法中添加 services.AddMemoryCache() 来实现内存缓存。这可以与 IronPDF 无缝集成,以实现高效的 PDF 处理和数据检索。

IMemoryCache 在缓存中的作用是什么?

IMemoryCache 是 .NET 应用程序中用于有效管理缓存条目的接口。与 IronPDF 配合使用时,它允许开发人员快速存储和检索 PDF 数据,提升应用程序性能。

什么是 .NET 中缓存的常见配置选项?

常见的配置选项包括使用 MemoryCacheEntryOptions 设置过期策略、大小限制和驱逐策略。这些配置优化了缓存过程,特别是在使用 IronPDF 处理 PDF 时。

开发人员如何在 .NET 应用程序中创建动态 PDF?

开发人员可以使用 IronPDF 在 .NET 应用程序中创建动态 PDF。它支持 HTML 转换为 PDF、添加页眉和页脚等,为 PDF 生成和操作提供了多种功能。

将缓存与 .NET 中的 PDF 生成集成有哪些好处?

在 .NET 应用程序中使用 IronPDF 集成缓存与 PDF 生成可以显著提高速度并减少延迟。由于能够更快访问经常使用的数据,这导致更好的用户体验和更具可扩展性的应用程序。

您如何监控和增强 .NET 应用程序中的缓存系统?

可以使用性能计数器来监控 .NET 应用程序中缓存系统的效率。此监控允许进行调整和增强,以确保最佳性能,尤其是在使用 IronPDF 进行 PDF 任务时。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,是 C# PDF 技术的先锋工程师。作为 Iron Software 核心代码库的原始开发者,自公司成立以来,他就塑造了公司的产品架构,并与首席执行官 Cameron Rimington 一起将其转变成一家公司,拥有50多人,服务于 NASA、特斯拉和全球政府机构。

Jacob 拥有曼彻斯特大学 (1998-2001) 的一级荣誉土木工程学士学位。1999 年在伦敦创办了自己的第一家软件公司,并于 2005 年创建了他的第一个 .NET 组件后,他专注于解决微软生态系统中的复杂问题。

他的旗舰 IronPDF 和 Iron Suite .NET 库在全球已获得超过 3000 万次的 NuGet 安装,其基础代码继续为全球使用的开发者工具提供支持。拥有 25 年商业经验和 41 年编程经验的 Jacob 仍专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。