跳至頁尾內容
.NET 幫助

C# LazyCache(開發者如何理解其運作方式)

快取是軟體開發中的一項基本技術,它透過將頻繁存取的資料儲存在記憶體或更快的儲存媒體中來提高效能。 在 C# 中, LazyCache是一個流行的庫,它簡化了線程安全的快取實現,使開發人員更容易在應用程式的高負載場景中有效地利用快取。

LazyCache是什麼?

LazyCache 是一個用於 .NET/ASP.NET Core 應用程式的底層快取提供者庫,它提供了一個簡單直覺的 API 來快取資料。 它以 NuGet 套件的形式提供,可以輕鬆整合到 C# 專案中。 LazyCache 的主要目標是簡化快取實現,並使用雙重鎖定快取模式減少管理快取資訊所需的樣板程式碼。

LazyCache 的主要特性:

1.簡單的 API: LazyCache 提供了一個簡單的 API,用於新增、檢索和刪除快取項目。 開發人員可以快速將快取整合到他們的應用程式或 Web 服務呼叫中,而無需處理複雜的快取機制。

2.自動過期: LazyCache 支援根據可設定的過期策略自動過期快取項目。 開發者可以指定快取項目的過期時間,LazyCache 會從快取資料中刪除過期項目。

3.記憶體快取: LazyCache 預設將快取項目儲存在記憶體中,因此適用於需要快速存取快取資料的場景。 記憶體快取可確保快取資料存取的低延遲和高吞吐量。

4.執行緒安全操作: LazyCache 提供線程安全的操作,用於新增、檢索和刪除快取項目。 這樣可以確保多個執行緒同時存取緩存,而不會出現資料損壞或不一致的風險。

5.可擴充性: LazyCache 的設計具有可擴充性,可讓開發人員根據其特定需求自訂快取行為。 它提供了實現自訂快取策略的接口,例如分散式快取或持久化快取。

如何在 C# 中使用 LazyCache:

由於 LazyCache 具有直覺的 API,因此在 C# 中使用它非常簡單。 下面是一個基本範例,示範如何使用 LazyCache 快取方法呼叫的結果:

using LazyCache;

public class DataService
{
    // Define a private readonly field for the cache
    private readonly IAppCache _cache;

    // Constructor to initialize the cache
    public DataService(IAppCache cache)
    {
        _cache = cache;
    }

    // Method to retrieve data (cached or fetched)
    public string GetData()
    {
        return _cache.GetOrAdd("dataKey", () =>
        {
            // Simulate expensive operation such as database calls
            return FetchDataFromDatabase();
        });
    }

    // Simulate fetching data from a database
    private string FetchDataFromDatabase()
    {
        return "Cached Data";
    }
}
using LazyCache;

public class DataService
{
    // Define a private readonly field for the cache
    private readonly IAppCache _cache;

    // Constructor to initialize the cache
    public DataService(IAppCache cache)
    {
        _cache = cache;
    }

    // Method to retrieve data (cached or fetched)
    public string GetData()
    {
        return _cache.GetOrAdd("dataKey", () =>
        {
            // Simulate expensive operation such as database calls
            return FetchDataFromDatabase();
        });
    }

    // Simulate fetching data from a database
    private string FetchDataFromDatabase()
    {
        return "Cached Data";
    }
}
$vbLabelText   $csharpLabel

在這個範例中, DataService類別使用 LazyCache 來快取GetData()方法的結果。 GetOrAdd()方法會擷取與指定鍵("dataKey")關聯的快取資料(如果存在)。 如果資料未被緩存,則執行提供的委託FetchDataFromDatabase()來取得數據,然後將資料快取以供日後使用。

IronPDF簡介

LazyCache C#(開發者工作原理):圖 1 - IronPDF

IronPDF是一個功能強大的 C# PDF 庫,可在 .NET 專案中產生、編輯和提取 PDF 文件中的內容。 以下是一些主要特點:

  1. HTML 轉 PDF:

    • 將 HTML、CSS 和 JavaScript 內容轉換為 PDF 格式。
    • 使用 Chrome 渲染引擎,可產生像素級完美的 PDF 檔案。
    • 從 URL、HTML 檔案或 HTML 字串產生 PDF。

2.圖片和內容轉換:

  • 將影像轉換為 PDF 格式,反之亦然。
  • 從現有 PDF 文件中提取文字和圖像。
  • 支援多種影像格式。

3.編輯和篡改:

  • 設定 PDF 的屬性、安全性和權限。
  • 新增數位簽章。
  • 編輯元資料和修訂歷史。

4.跨平台支援:

  • 可與 .NET Core(8、7、6、5 和 3.1+)、.NET Standard(2.0+)和 .NET Framework(4.6.2+)搭配使用。
  • 相容於 Windows、Linux 和 macOS。
  • 可透過 NuGet 輕鬆安裝。

使用 IronPDF 和 LazyCache 產生 PDF 文檔

首先,使用 Visual Studio 建立一個控制台應用程式,如下所示。

LazyCache C#(開發者如何理解其工作原理):圖 2 - 控制台應用程式

請提供項目名稱。

LazyCache C#(開發者工作原理):圖 3 - 專案配置

請提供.NET版本。

LazyCache C#(開發者工作原理):圖 4 - 目標框架

安裝 IronPDF 軟體包。

LazyCache C#(開發者如何理解其運作方式):圖 5 - IronPDF

安裝 LazyCache 套件以新增快取的方法呼叫。

LazyCache C#(開發者如何理解其運作方式):圖 6 - LazyCache

using LazyCache;
using IronPdf; // Add the IronPdf namespace
using System;

namespace CodeSample
{
    internal class LazyCacheDemo
    {
        public static void Execute()
        {
            // Instantiate the Chrome PDF Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo LazyCache and IronPDF</h1>";
            content += "<h2>Create CachingService</h2>";

            // Create the cache service using LazyCache
            IAppCache cache = new CachingService();

            var cacheKey = "uniqueKey"; // Unique key for caching the content

            // Define a factory method to generate the cacheable data
            Func<string> expensiveLongRunMethod = () =>
            {
                // Render the HTML content to a PDF
                var pdf = renderer.RenderHtmlAsPdf(content);

                // Export the rendered PDF to a file
                pdf.SaveAs("AwesomeLazyCacheAndIronPdf.pdf");

                // Return the content as a string
                return content;
            };

            // Get the cached value or execute expensiveLongRunMethod to cache it
            string cachedValue = cache.GetOrAdd(cacheKey, expensiveLongRunMethod);

            // Output the cached value to the console
            Console.WriteLine(cachedValue);
        }
    }
}
using LazyCache;
using IronPdf; // Add the IronPdf namespace
using System;

namespace CodeSample
{
    internal class LazyCacheDemo
    {
        public static void Execute()
        {
            // Instantiate the Chrome PDF Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo LazyCache and IronPDF</h1>";
            content += "<h2>Create CachingService</h2>";

            // Create the cache service using LazyCache
            IAppCache cache = new CachingService();

            var cacheKey = "uniqueKey"; // Unique key for caching the content

            // Define a factory method to generate the cacheable data
            Func<string> expensiveLongRunMethod = () =>
            {
                // Render the HTML content to a PDF
                var pdf = renderer.RenderHtmlAsPdf(content);

                // Export the rendered PDF to a file
                pdf.SaveAs("AwesomeLazyCacheAndIronPdf.pdf");

                // Return the content as a string
                return content;
            };

            // Get the cached value or execute expensiveLongRunMethod to cache it
            string cachedValue = cache.GetOrAdd(cacheKey, expensiveLongRunMethod);

            // Output the cached value to the console
            Console.WriteLine(cachedValue);
        }
    }
}
$vbLabelText   $csharpLabel

程式碼解釋

*實例化渲染器:建立一個ChromePdfRenderer實例來處理 HTML 內容到 PDF 格式的轉換。

  • Define Content: HTML content ("

    Demo LazyCache and IronPDF

    ", "

    Create CachingService

    ", etc.) is prepared. 此內容將產生 PDF 文件並快取以供重複使用。

*建立快取服務:使用 LazyCache 的CachingService實例化快取服務 ( IAppCache )。 此惰性快取服務管理快取資料的儲存和檢索。

*快取鍵:指派一個唯一識別碼("uniqueKey")來表示快取的 PDF 內容。

*定義昂貴的方法:定義一個工廠方法( expensiveLongRunMethod )來產生可快取的資料。 此方法呼叫ChromePdfRenderer將 HTML 內容渲染為 PDF。 然後將生成的 PDF 文件保存並以字串形式返回。

*取得或新增至快取:呼叫服務的GetOrAdd方法來檢索與cacheKey關聯的快取值。 如果快取中不存在該值,則會呼叫expensiveLongRunMethod來計算該值,將其儲存在快取中,然後傳回該值。 如果該值已緩存,則直接返回。

*輸出:快取的 PDF 內容(作為字串)列印到控制台( Console.WriteLine(cachedValue) ),示範了快取資料的檢索。

輸出

LazyCache C#(開發者工作原理):圖 7 - 控制台輸出

PDF

LazyCache C#(開發者工作原理):圖 8 - PDF 輸出

IronPDF 許可(提供試用版)

IronPDF軟體包需要許可證才能運作和產生PDF。 在應用程式啟動時,請在存取該套件之前,請新增以下程式碼。

IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
$vbLabelText   $csharpLabel

IronPDF 的試用許可證頁面提供試用許可證。

結論

LazyCache 透過提供簡單易用的 API 和快取項目的自動過期功能,簡化了 C# 應用程式中的快取實作。 透過將 LazyCache 整合到您的專案中,您可以有效地快取頻繁存取的數據,從而提高效能,減少延遲,並以原子化和整潔的方式優化資源利用率。 無論您是建立 Web 應用程式、API 還是服務,LazyCache 都可以成為提高 C# 應用程式效能和可擴充性的寶貴工具。

另一方面,IronPDF 是一款功能強大且用途廣泛的 C# 程式庫,可用於在 .NET 應用程式中處理 PDF 文件。 它強大的功能包括創建、編輯、將 HTML 渲染為 PDF 以及以程式設計方式操作 PDF。 IronPDF 具備加密和數位簽章等安全文件處理功能,使開發人員能夠有效率地管理和自訂 PDF 工作流程,使其成為 C# 開發中各種文件管理和生成任務的寶貴工具。

常見問題解答

什麼是 LazyCache?它如何使 .NET 應用程式受益?

LazyCache 是一個專為 .NET/ASP.NET Core 應用程式設計的快取提供者庫。它透過簡化快取的實現、減少樣板程式碼以及利用記憶體資料儲存來提升效能,從而最大限度地減少不必要的資料檢索操作,使這些應用程式受益。

如何使用 LazyCache 在 C# 中實作快取?

要在 C# 中使用 LazyCache 實作緩存,您需要透過 NuGet 安裝該程式庫,並使用 LazyCache 的 CachingService 設定快取服務。您可以使用GetOrAdd方法快取數據,該方法會儲存方法呼叫的結果,並提供一個唯一的鍵和委託,以便在數據尚未快取時獲取數據。

LazyCache 如何確保快取中的資料始終保持最新?

LazyCache 透過支援基於可設定策略的快取項目自動過期,確保資料始終保持最新。此功能允許開發人員設定過期時間,從而確保不會向使用者提供過時的資料。

LazyCache 的線程安全性體現在哪裡?

由於其獨特的設計,LazyCache 是線程安全的,允許多個線程與快取互動而不會造成資料損壞。它採用雙重鎖定機制,確保在多執行緒應用程式中安全地執行快取操作。

如何在C#專案中最佳化PDF文件管理?

您可以使用 IronPDF 來最佳化 C# 專案中的 PDF 文件管理。 IronPDF 提供強大的功能,例如 HTML 轉 PDF、內容擷取和 PDF 編輯。它支援跨平台相容性,並且可以與 LazyCache 集成,緩存生成的 PDF 文件以提升效能。

LazyCache 是否可用於分散式快取?

是的,LazyCache 提供了可擴展性,允許開發者實現自訂快取策略,包括分散式快取。這種靈活性使其能夠與其他快取系統集成,從而支援分散式環境。

將 C# PDF 函式庫與 LazyCache 結合使用有哪些優點?

將 IronPDF 等 C# PDF 庫與 LazyCache 結合使用,可以有效率地產生和快取 PDF 文件。這種組合避免了重複生成 PDF,從而提升了應用程式效能,並能快速存取常用文件。

使用像 IronPDF 這樣的 C# PDF 庫需要哪些許可要求?

IronPDF 需要許可證才能使用其全部功能。開發者可以從 IronPDF 網站取得試用許可證,並必須在應用程式程式碼中包含許可證金鑰才能啟動用於產生 PDF 的庫。

LazyCache 如何提升應用程式效能?

LazyCache 透過將頻繁存取的資料儲存在記憶體中來提升應用程式效能,從而減少重複的資料檢索操作。這可以加快響應速度,並降低資料庫或外部資料來源的負載。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。