跳過到頁腳內容
.NET幫助

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 來安裝套件:

Microsoft.Extensions.Caching.Memory Example (With PDF) in 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...
}
Imports Microsoft.Extensions.Caching.Memory
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	' Add memory cache service
	services.AddMemoryCache()
	' Other service configurations...
End Sub
$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...
}
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
$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...
}
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
$vbLabelText   $csharpLabel

根據您應用程式的規格修改設定。

這些說明將幫助您在 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
$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;
        }
    }
}
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
$vbLabelText   $csharpLabel

我們導入 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 Example (With PDF) in C#:圖 2 - 上述程式碼的輸出範例

結論

從各方面考慮,Microsoft.Extensions.Caching.Memory 可用於提高 .NET 應用程式的可擴展性和效能,尤其是那些基於 ASP.NET Core Framework 的應用程式。 開發人員可以利用記憶體快取改善使用者體驗、減少延遲並優化資料存取。 該函式庫提供靈活且易於使用的 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 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。