Exemplo de Microsoft.Extensions.Caching.Memory (com PDF) em C#
Para construir aplicações responsivas e eficazes, métodos de otimização são frequentemente necessários para aplicações .NET . O armazenamento em cache é uma abordagem eficaz que consiste em guardar temporariamente, em um cache distribuído, o material frequentemente solicitado para facilitar uma recuperação mais rápida. A redução no tempo de processamento e na carga do servidor com essa estratégia pode levar a um aumento significativo no desempenho do aplicativo. Além disso, contadores de desempenho podem ser implementados para monitorar e aprimorar o sistema de cache.
[O armazenamento em cache](https://en.wikipedia.org/wiki/Cache_(computing) é uma estratégia de otimização poderosa nesse contexto. Microsoft.Extensions.Caching.Memory fornece uma solução eficiente de cache de objetos em memória para aplicações .NET . Seus aplicativos centrados em PDF funcionarão e responderão muito mais rapidamente se você usar estrategicamente o cache MemoryCache juntamente com o IronPDF.
Exploramos como integrar exemplos em C# com o IronPDF de forma eficiente. Neste artigo, discutiremos as vantagens do armazenamento em cache no processo de conversão de HTML para PDF com o IronPDF , abordaremos algumas dicas úteis de implementação e ofereceremos um passo a passo detalhado para configurar o cache no seu programa IronPDF . Ao final, você terá as habilidades e os recursos necessários para desenvolver aplicativos PDF eficazes e intuitivos.
Microsoft.Extensions.Caching.Memory: Os fundamentos do cache no .NET
O armazenamento em cache é um método utilizado em muitas aplicações .NET de alto desempenho que armazena dados acessados frequentemente na memória para recuperação rápida. Microsoft.Extensions é uma das muitas opções de cache disponíveis. Caching.Memory é uma opção particularmente forte e adaptável. Esta biblioteca é um componente do namespace maior Microsoft.Extensions.Caching, que oferece uma abordagem de cache em memória simples, porém eficaz.
Tipos de chave dentro de "Microsoft.Extensions.Caching.Memory"
IMemoryCache
- A capacidade fundamental para utilizar o cache na memória é representada por esta interface. Oferece maneiras de gerenciar entradas em cache, além de adicionar, recuperar e remover entradas.
- Considere-o como seu principal ponto de entrada para seus processos de cache.
MemoryCache
- A implementação real de
IMemoryCacheestá nesta classe. Oferece administração e armazenamento real em memória para itens em cache. - A injeção de dependência é geralmente usada em aplicações ASP.NET Core para recuperar uma instância de
MemoryCache.
MemoryCacheEntryOptions
Com essa classe, você pode especificar configurações para itens de cache específicos. Essas configurações regulam coisas como:
- Validade: Você pode configurar janelas de validade deslizantes (em que a entrada expira se não for acessada dentro de um determinado intervalo) ou horários de validade absolutos (em que a entrada expira automaticamente).
- Prioridade: Isso influencia se os itens serão removidos quando o cache estiver cheio. Entradas com prioridade mais alta têm menor probabilidade de serem removidas.
- Função de retorno pós-remoção: Isso permite ajustar a lógica de tratamento de dados após o vencimento. É especialmente útil quando dados críticos precisam ser atualizados, recursos precisam ser gerenciados e registros precisam ser feitos.
CacheEntry
- Dentro do cache, este tipo denota uma única entrada. Oferece métodos e atributos para recuperar detalhes de tamanho, configurações de expiração e valores em cache.
- Em essência, contém todas as informações sobre um dado específico que está armazenado no cache.
ICacheEntry
- Esta interface descreve as atividades básicas que podem ser realizadas em um item de cache, embora não seja necessária para operações básicas de armazenamento em cache. Contém instruções sobre como recuperar o valor e os detalhes de expiração. Isso é mais comum em cenários onde você precisa recuperar a chave do texto.
- Esta interface é implementada pela classe
CacheEntry, que oferece uma implementação prática dessas funcionalidades.
Instalar e configurar Microsoft.Extensions.Caching.Memory
Durante a inicialização da aplicação, a memória é utilizada para configurar o serviço de cache dentro da coleção de serviços da aplicação ASP.NET Core . Abaixo está um aplicativo ASP.NET Core com Microsoft.Extensions.Caching.Memory configurado:
Instale o pacote NuGet necessário.
Primeiro, certifique-se de que Microsoft.Extensions.Caching.Memory esteja instalado para o seu projeto. Você pode instalá-lo usando o Console do Gerenciador de Pacotes NuGet com o comando:
Install-Package Microsoft.Extensions.Caching.Memory
Ou podemos usar o Gerenciador de Pacotes NuGet para instalar o pacote:

Configure os serviços no arquivo Startup.cs
Navegue até o método ConfigureServices em seu aplicativo ASP.NET Core abrindo o arquivo Startup.cs. Para configurar o serviço de cache de memória, adicione o seguinte código:
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...
}
Imports Microsoft.Extensions.Caching.Memory
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Add memory cache service
services.AddMemoryCache()
' Other service configurations...
End Sub
O objeto de serviço de cache de memória é adicionado à coleção de serviços do aplicativo e configurado por este código. O serviço do sistema de cache de memória é registrado usando suas configurações padrão através da função AddMemoryCache.
Injetar IMemoryCache
Uma vez que o armazenamento em cache esteja configurado, qualquer classe ou componente que precise de cache pode ter a interface IMemoryCache injetada nele. Em uma classe de controlador ou serviço, por exemplo:
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...
}
Public Class MyService
Private ReadOnly _cache As IMemoryCache
Public Sub New(ByVal cache As IMemoryCache)
_cache = cache
End Sub
' Use _cache to perform caching operations...
End Class
Os métodos para armazenar em cache e recuperar dados da memória são fornecidos pela interface IMemoryCache.
Configurar opções de cache
Ao configurar os parâmetros de cache, você pode alterar o comportamento do cache de memória, incluindo restrições de tamanho, táticas de remoção de entradas de cache e regulamentações de expiração de valores de cache. Aqui está uma ilustração de como configurar as opções de cache:
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...
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure cache options
services.AddMemoryCache(Sub(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
End Sub)
' Other service configurations...
End Sub
Modifique as configurações de acordo com as especificações da sua aplicação.
Estas instruções ajudarão você a configurar o Microsoft.Extensions.Caching.Memory em sua aplicação ASP.NET Core , permitindo que ela opere de forma mais rápida e eficiente, armazenando e recuperando dados acessados com frequência.
Começando
O que é o IronPDF?
Com a ajuda da conhecida biblioteca .NET IronPDF, os programadores podem gerar, editar e exibir documentos PDF dentro de aplicativos .NET . Criar PDFs a partir de conteúdo HTML, imagens ou dados brutos é apenas uma das muitas funções que oferece para trabalhar com PDFs. Outras funcionalidades incluem adicionar texto, imagens e formas a documentos PDF preexistentes, converter páginas HTML em PDFs e extrair texto e imagens de PDFs.
Abaixo estão algumas funcionalidades do IronPDF:
- Criação de PDFs a partir de HTML, PNGs e dados não processados.
- Extração de imagens e texto de PDFs.
- Adicionando cabeçalhos, rodapés e marcas d'água em PDFs.
- Documentos PDF com proteção por senha e criptografia.
- Preenchimento de formulários e recursos de assinatura digital.
Instale o pacote NuGet
No seu projeto, certifique-se de que o pacote IronPDF esteja instalado. O Console do Gerenciador de Pacotes NuGet pode ser usado para instalá-lo:
Install-Package IronPdf
Para acessar a função ConfigureServices, abra o arquivo Startup.cs em sua aplicação ASP.NET Core . Para configurar o IronPDF, adicione o seguinte código.
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...
}
Imports IronPdf
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure IronPDF
services.AddSingleton(Of HtmlToPdf)()
' Other service configurations...
End Sub
Ao configurar o serviço HtmlToPdf do IronPDF como um singleton, este código garante que o aplicativo crie e use apenas uma instância de HtmlToPdf.
Usando Microsoft.Extensions.Caching.Memory com IronPDF
Em aplicações .NET , Microsoft.Extensions.Caching.Memory oferece um meio prático de armazenar dados frequentemente solicitados para recuperação mais rápida.
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;
}
}
}
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Extensions.Caching.Memory
Imports System.Net
Imports System.Net.Http.Headers
Imports IronPdf
Namespace DemoWebApplication.Controllers
<ApiController>
<Route("[controller]")>
Public Class DemoController
Inherits ControllerBase
Private ReadOnly _cache As IMemoryCache
Private ReadOnly _htmlToPdf As HtmlToPdf
Private ReadOnly _logger As ILogger(Of DemoController)
Public Sub New(ByVal logger As ILogger(Of DemoController), ByVal cache As IMemoryCache, ByVal htmlToPdf As HtmlToPdf)
_logger = logger
_cache = cache
_htmlToPdf = htmlToPdf
End Sub
<HttpGet>
Public Function Generate() As FileContentResult
Dim fileName As String = "Sample.pdf"
Dim stream = GeneratePdf("Hello IronPDF")
Return New FileContentResult(stream, "application/octet-stream") With {.FileDownloadName = fileName}
End Function
Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
' Object key
Dim cacheKey As String = "GeneratedPdf"
Dim pdfBytes() As Byte
If Not _cache.TryGetValue(cacheKey, pdfBytes) Then
' PDF not found in cache, generate it
Dim 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))
End If
Return pdfBytes
End Function
End Class
End Namespace
Importamos os namespaces necessários para trabalhar com Microsoft e ASP.NET Microsoft.Extensions.Caching.Memory. Criamos o controlador DemoController, que é derivado de ControllerBase. Este controlador responderá a consultas enviadas via HTTP. Uma instância de IMemoryCache é injetada no construtor do controlador.
Para controlar o ciclo de vida dos serviços, incluindo o cache de memória, o ASP.NET Core oferece injeção de dependência. Com o atributo [HttpGet] aplicado, o método Generate é marcado para lidar com solicitações HTTP GET para o armazenamento a partir da rota designada (/Demo). Tentamos obter os dados do PDF do cache usando a chave de cache fornecida. Se os dados não forem encontrados no cache, usamos a função GeneratePdf para criar um novo PDF.
Em um cenário com vários servidores de aplicativos, certifique-se de configurar o cache distribuído para um gerenciamento de cache consistente em todos os servidores.
Para utilizar o Microsoft.Extensions.Caching.Memory, consulte a documentação e o código de exemplo fornecidos para armazenar dados em cache e melhorar o desempenho em aplicativos ASP.NET Core . Na prática, você pode ajustar as políticas de expiração, as chaves de cache e o comportamento de cache para atender às necessidades do seu aplicativo. Armazenar em cache dados que são dispendiosos de gerar ou que são frequentemente acessados por várias threads pode melhorar a experiência geral do usuário e reduzir drasticamente os tempos de resposta.

Conclusão
Levando tudo em consideração, Microsoft.Extensions.Caching.Memory pode ser usado para aumentar a escalabilidade e o desempenho de aplicativos .NET , especialmente aqueles baseados no framework ASP.NET Core . Os desenvolvedores podem melhorar a experiência do usuário, minimizar a latência e otimizar o acesso aos dados utilizando o cache em memória. A biblioteca fornece uma API flexível e fácil de usar para desenvolver estratégias de cache direcionadas a requisitos específicos de aplicativos, seja para armazenar em cache dados de referência, resultados de consultas ou valores calculados. Você pode obter aumentos de velocidade notáveis e maior capacidade de resposta do aplicativo adotando as melhores práticas de cache e adicionando Microsoft.Extensions.Caching.Memory aos seus aplicativos .NET .
Ao aproveitar os recursos do Microsoft.Extensions, com a ajuda do IronPDF para criação dinâmica de PDFs e do Caching.Memory para armazenamento em cache eficiente de dados, os desenvolvedores .NET podem aumentar significativamente a velocidade de seus aplicativos. Essa poderosa combinação permite que os desenvolvedores criem facilmente aplicativos de alto desempenho, escaláveis e responsivos, reduzindo a carga do servidor, melhorando a experiência do usuário e eliminando a sobrecarga de processamento.
O IronPDF pode ser adquirido a um preço razoável, e a compra do pacote inclui uma licença vitalícia. O pacote oferece um excelente custo-benefício, pois começa em $799, uma taxa única para vários sistemas. Para usuários com licenças, oferece suporte técnico online 24 horas por dia, 7 dias por semana. Para obter mais detalhes sobre a cobrança, visite a página de licenciamento do IronPDF . Visite esta página sobre a Iron Software para saber mais sobre os produtos fabricados pela Iron Software.
Perguntas frequentes
Qual é a finalidade do Microsoft.Extensions.Caching.Memory em aplicações .NET?
O Microsoft.Extensions.Caching.Memory é usado para melhorar o desempenho em aplicativos .NET, fornecendo cache de objetos na memória. Ele armazena dados acessados com frequência na memória para recuperação rápida, o que pode ser particularmente benéfico quando usado em conjunto com o IronPDF para operações com PDFs.
Como o armazenamento em cache pode melhorar o desempenho do processamento de PDFs no .NET?
O armazenamento em cache pode reduzir o tempo de processamento e a carga do servidor, armazenando na memória os dados de PDFs solicitados com frequência. Quando integrado a uma biblioteca como o IronPDF, permite a criação e manipulação mais rápidas de PDFs, melhorando a velocidade e a capacidade de resposta geral do aplicativo.
Como implementar o cache em memória em uma aplicação ASP.NET Core?
No ASP.NET Core, você pode implementar o cache em memória adicionando services.AddMemoryCache() no método ConfigureServices do arquivo Startup.cs . Isso se integra perfeitamente ao IronPDF para processamento eficiente de PDFs e recuperação de dados.
Qual é o papel do IMemoryCache no armazenamento em cache?
IMemoryCache é uma interface usada em aplicações .NET para gerenciar entradas de cache de forma eficiente. Quando combinada com o IronPDF, permite que os desenvolvedores armazenem e recuperem dados de PDF rapidamente, melhorando o desempenho da aplicação.
Quais são as opções de configuração comuns para cache no .NET?
As opções de configuração comuns incluem a definição de políticas de expiração, limites de tamanho e estratégias de remoção usando MemoryCacheEntryOptions . Essas configurações otimizam o processo de cache, especialmente ao usar o IronPDF para lidar com PDFs.
Como os desenvolvedores podem criar PDFs dinâmicos em um aplicativo .NET?
Os desenvolvedores podem usar o IronPDF para criar PDFs dinâmicos em aplicativos .NET. Ele oferece suporte à conversão de HTML para PDF, adição de cabeçalhos e rodapés, e muito mais, tornando-se uma ferramenta versátil para geração e manipulação de PDFs.
Quais são os benefícios de integrar o cache com a geração de PDFs no .NET?
A integração do cache com a geração de PDFs usando o IronPDF em aplicações .NET pode aumentar significativamente a velocidade e reduzir a latência. Isso resulta em uma melhor experiência do usuário e em aplicações mais escaláveis devido ao acesso mais rápido aos dados frequentemente utilizados.
Como monitorar e aprimorar o sistema de cache em aplicações .NET?
Contadores de desempenho podem ser implementados para monitorar a eficiência do sistema de cache em aplicações .NET. Esse monitoramento permite ajustes e melhorias para garantir o desempenho ideal, especialmente ao trabalhar com o IronPDF para tarefas em PDF.




