跳至页脚内容
.NET 帮助

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

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

缓存在这种情况下是一种强大的优化策略。 Microsoft.Extensions.Caching.Memory 为.NET应用程序提供了一个高效的内存对象缓存解决方案。 如果您在IronPDF中战略性地使用MemoryCache缓存,您的以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 中配置服务

在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

要访问ConfigureServices函数,请在ASP.NET Core应用中打开Startup.cs文件。 要配置 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的一个实例。

在IronPDF中使用Microsoft.Extensions.Caching.Memory

在.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

我们导入了使用Microsoft和ASP.NET所需的命名空间Microsoft.Extensions.Caching.Memory。 我们创建了ControllerBase派生而来的。 这个控制器将响应通过HTTP发送的查询。一个IMemoryCache的实例被注入到控制器的构造函数中。

ASP.NET Core 提供依赖注入以控制服务的生命周期,包括内存缓存。 应用Generate方法被标记为处理从指定路由(/Demo)到存储的HTTP GET请求。 我们尝试使用给定的缓存键从缓存中获取 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应用中,您可以实现显著的速度提高和应用响应性的增强。

通过利用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 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me