Microsoft.Extensions.Caching.Memory 示例 (含 PDF) in C#
為了有效地建構應用程式,.NET 應用程式經常需要使用最佳化方法。 快取(Caching)是一種有效的方法,它是將經常請求的資料暫時存放在分散式快取記憶體中,以便更快速地檢索。 使用此策略可減少處理時間和伺服器負載,大幅提升應用程式效能。 此外,還可執行效能計數器,以監控並加強快取記憶體系統。
快取在這種情況下是一種有效的最佳化策略。 Microsoft.Extensions.Caching.Memory 為 .NET 應用程式提供高效的記憶體物件快取解決方案。 如果您策略性地將 MemoryCache 快取與 IronPDF 結合使用,您的以 PDF 為中心的應用程式的運作和回應速度將大大加快。
我們探討如何有效率地將 Microsoft.Extensions.Caching.Memory C# 範例與 IronPDF 整合。 在本文中,我們將討論快取在 IronPDF HTML 至 PDF 轉換過程中的優勢,介紹一些有用的實作技巧,並提供在您的 IronPDF 程式中設定快取的詳細步驟。 一切完成後,您將擁有開發有效且直覺的 PDF 應用程式所需的技能與資源。
Microsoft.Extensions.Caching.Memory: .NET 快取基礎
快取(Caching)是許多高效能 .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 Package Manager 來安裝套件:
。
在 Startup.cs 中設定服務
開啟 ASP.NET Core 應用程式中的 Startup.cs 文件,導覽至 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...
}
Imports Microsoft.Extensions.Caching.Memory
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Add memory cache service
services.AddMemoryCache()
' Other service configurations...
End Sub
記憶體快取服務物件會新增至應用程式的服務集合,並透過此程式碼進行設定。 記憶體快取系統服務透過 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...
}
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
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...
}
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
根據您應用程式的規格修改設定。
這些說明將幫助您在 ASP.NET Core 應用程式中設定 Microsoft.Extensions.Caching.Memory,使其能夠透過儲存和檢索頻繁存取的資料來更快、更有效率地執行。
開始
什麼是 IronPDF?
在著名的 .NET 函式庫 IronPDF 的幫助下,程式設計師可以在 .NET 應用程式中產生、編輯和顯示 PDF 文件。 從 HTML 內容、圖片或原始資料建立 PDF,只是它提供的處理 PDF 的眾多功能之一。 其他功能包括在預先存在的 PDF 文件中加入文字、影像和圖形,將 HTML 頁面轉換為 PDF,以及從 PDF 中萃取文字和影像。
以下是 IronPDF 的一些功能:
- 從 HTML、PNG 和未處理的資料建立 PDF。
- 從 PDF 中萃取圖片與文字。
- 新增 PDF 標頭、頁尾及水印。
- 具有密碼保護和加密功能的 PDF 文件。
- 填寫表格和數位簽章功能。
安裝 NuGet 套件
在您的專案中,請確認已安裝 IronPDF 套件。 可使用 NuGet Package Manager Console 進行安裝:
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...
}
Imports IronPdf
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure IronPDF
services.AddSingleton(Of HtmlToPdf)()
' Other service configurations...
End Sub
透過將 IronPDF 的 HtmlToPdf 服務設定為單例,此程式碼可確保應用程式僅建立和使用 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;
}
}
}
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
我們匯入與 Microsoft 和 ASP.NET 一起工作所需的命名空間 Microsoft.Extensions.Caching.Memory。 我們創建了 DemoController 控制器,該控制器派生自 ControllerBase。 此控制器將回應透過 HTTP 發送的查詢。 IMemoryCache 的一個實例被注入到控制器的建構函數中。
為了控制服務(包括記憶體快取)的生命週期,ASP.NET Core 提供了依賴注入功能。 應用 [HttpGet] 屬性後,Generate 方法被標記為處理來自指定路由 (/Demo) 的對商店的 HTTP GET 請求。 我們嘗試使用給定的快取記憶體金鑰從快取記憶體中取得 PDF 資料。 如果快取中找不到數據,我們將使用 GeneratePdf 函數建立新的 PDF。
在有多台應用程式伺服器的情況下,請務必設定分散式快取,以便在所有伺服器上進行一致的快取處理。
若要使用 Microsoft.Extensions.Caching.Memory,請參閱提供的文件和範例程式碼,以快取資料並提高 ASP.NET Core 應用程式的效能。 實際上,您可以調整到期政策、快取金鑰和快取行為,以符合您應用程式的需求。 對於產生成本較高或經常被多個執行緒存取的資料進行快取,可以改善整體使用者體驗,並大幅縮短回應時間。

結論
綜上所述,Microsoft.Extensions.Caching.Memory 可用於提高 .NET 應用程式的可擴充性和效能,特別是那些基於 ASP.NET Core 框架的應用程式。 開發人員可以利用記憶體快取改善使用者體驗、減少延遲並優化資料存取。 該函式庫提供靈活且易於使用的 API,可針對特定應用程式需求開發快取策略,無論是快取參考資料、查詢結果或計算值。 透過採用快取最佳實踐並將 Microsoft.Extensions.Caching.Memory 添加到您的 .NET 應用程式中,您可以實現明顯的速度提升和增強應用程式回應能力。
透過利用 Microsoft.Extensions 的各項功能,透過 IronPDF 的動態 PDF 建立功能和 Caching.Memory 的高效資料快取功能,.NET 開發人員可以大幅提升應用程式的運行速度。這種強大的組合能夠幫助開發人員輕鬆設計高效能、可擴展且回應迅速的應用程式,從而降低伺服器負載、改善使用者體驗並消除處理開銷。
IronPDF 可以合理的價格購買,取得套件包括終身授權。 該套餐物超所值,起價僅為 $999,多個系統只需支付一次費用。 對於擁有授權的使用者,它提供全天候的線上工程協助。 有關收費的詳細資訊,請造訪 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.cs 的 ConfigureServices 方法中添加 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 任務時。



