.NET ヘルプ

LazyCache C# (開発者のための仕組み)

公開済み 2024年8月13日
共有:

キャッシングは、頻繁にアクセスされるデータをメモリやより高速な記憶媒体に格納することでパフォーマンスを向上させる、ソフトウェア開発における基本的な技術である。 C#ではレイジーキャッシュは、スレッドセーフ・キャッシュの実装を簡素化し、開発者が高負荷シナリオのアプリケーションでキャッシュを効果的に活用しやすくする人気のライブラリである。

**LazyCacheとは何ですか?

LazyCacheは、.NET/ ASP.NET Coreアプリケーション用の基礎となるキャッシュ・プロバイダ・ライブラリで、データをキャッシュするためのシンプルで直感的なAPIを提供します。 NuGetパッケージとして提供されており、C#プロジェクトに簡単に統合できる。 LazyCacheの主な目標は、キャッシュの実装を簡素化し、ダブルロックのキャッシュパターンを使用してキャッシュ情報を管理するために必要な定型的なコードを削減することです。

LazyCacheの主な機能:

  1. シンプルなAPI: LazyCacheは、キャッシュされたアイテムを追加、取得、削除するためのシンプルなAPIを提供します。 開発者は、複雑なキャッシング・メカニズムを扱うことなく、アプリケーションやウェブサービス呼び出しにキャッシングを素早く統合することができる。

  2. 自動期限切れ: LazyCacheは、設定可能な期限切れポリシーに基づいて、キャッシュアイテムの自動期限切れをサポートします。 開発者はキャッシュアイテムの有効期限を指定することができ、LazyCacheはキャッシュデータから有効期限切れのアイテムを削除します。

  3. インメモリ・キャッシング: LazyCacheはデフォルトでキャッシュされたアイテムをメモリに保存するので、キャッシュされたデータへの高速アクセスが必要なシナリオに適しています。 インメモリ・キャッシングは、キャッシュ・データ・アクセスの低レイテンシーと高スループットを保証する。

  4. スレッドセーフな操作: LazyCacheは、キャッシュ項目の追加、取得、削除にスレッドセーフな操作を提供します。 これにより、データの破損や不整合のリスクなしに、複数のスレッドが同時にキャッシュにアクセスできるようになる。

  5. 拡張性: LazyCacheは拡張できるように設計されており、開発者は特定の要件に応じてキャッシュ動作をカスタマイズできる。 分散キャッシングや永続化キャッシングなど、カスタム・キャッシング戦略を実装するためのフックを提供します。

    C#でLazyCacheを使用する方法:

    C#でLazyCacheを使うのは、その直感的なAPIのおかげで簡単です。 以下は、LazyCacheを使ってメソッド呼び出しの結果をキャッシュする方法を示す基本的な例である:

using LazyCache;
public class DataService
{
// private readonly IAppCache cache
    private readonly IAppCache _cache;
    public DataService(IAppCache cache)
    {
        _cache = cache;
    }
    public string GetData()
    {
        return _cache.GetOrAdd("dataKey", () =>
        {
            // Simulate expensive operation such as database calls
            return FetchDataFromDatabase();
        });
    }
    private string FetchDataFromDatabase()
    {
        // Simulate fetching data from a database
        return "Cached Data";
    }
}
using LazyCache;
public class DataService
{
// private readonly IAppCache cache
    private readonly IAppCache _cache;
    public DataService(IAppCache cache)
    {
        _cache = cache;
    }
    public string GetData()
    {
        return _cache.GetOrAdd("dataKey", () =>
        {
            // Simulate expensive operation such as database calls
            return FetchDataFromDatabase();
        });
    }
    private string FetchDataFromDatabase()
    {
        // Simulate fetching data from a database
        return "Cached Data";
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

この例では、DataServiceクラスはLazyCacheを使ってGetDataの結果をキャッシュしています。()メソッド。 GetOrAdd()メソッドは、指定されたキーに関連するキャッシュされたデータを取得します。("dataKey")もし存在すれば。 データがキャッシュされていない場合、提供されたデリゲート(FetchDataFromDatabase())を実行してデータをフェッチし、将来の使用のためにキャッシュする。

IronPDFの紹介

C# LazyCache(開発者のための仕組み):図1 - IronPDF

IronPDFは、.NETプロジェクトでPDFドキュメントからコンテンツを生成、編集、抽出できる強力なC# PDFライブラリです。 以下は主な機能です:

  1. HTMLからPDFに変換:

    • HTML、CSS、JavaScriptコンテンツをPDF形式に変換します。

    • Chromeレンダリングエンジンを使用して、ピクセルパーフェクトなPDFを作成できます。

    • URL、HTMLファイル、HTML文字列からPDFを生成します。
  2. 画像とコンテンツの変換

    • 画像をPDFへ、またはPDFから変換します。

    • 既存のPDFからテキストと画像を抽出します。

    • 様々な画像フォーマットをサポート。
  3. 編集と操作

    • PDFのプロパティ、セキュリティ、権限を設定します。

    • デジタル署名を追加する。

    • メタデータとリビジョン履歴を編集する。
  4. クロスプラットフォームサポート:

    • .NET Coreで動作します。(8, 7, 6, 5, および3.1+).NET 標準(2.0以上)、および .NET Framework(4.6.2+).

    • Windows、Linux、macOSに対応。

    • NuGetで簡単にインストールできる。

IronPDFとLazyCacheを使ってPDFドキュメントを生成する

まず始めに、Visual Studioを使って以下のようにコンソール・アプリケーションを作成します。

C# LazyCache(開発者のための仕組み):図2 - コンソールアプリ

プロジェクト名を提供する。

C# LazyCache(開発者のための仕組み):図3 - プロジェクトの構成

.NET バージョンを提供する。

LazyCache C#(開発者のための仕組み):図4 - ターゲットフレームワーク

IronPDFパッケージをインストールします。

C# LazyCache(開発者のための仕組み):図5 - IronPDF

LazyCacheパッケージをインストールして、キャッシュ・メソッド呼び出しを追加する。

C# LazyCache(開発者のための仕組み):図6 - LazyCache

using LazyCache;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeSample
{
    internal class LazyCacheDemo
    {
        public static void Execute()
        {
            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo LazyCache and IronPDF</h1>";
            content += "<h2>Create CachingService</h2>";
            // Create the cache service using caching logic
            IAppCache cache = new CachingService();
            content += "<p>IAppCache cache = new CachingService();</p>";
            var cacheKey = "uniqueKey";           
            content += "<p>string cachedValue = cache.GetOrAdd(cacheKey, expensiveMethod);</p>";
            // Define a factory method to generate the cacheable data
            Func<string> expensiveLongRunMethod = () => {
                var pdf = renderer.RenderHtmlAsPdf(content);
                // Export to a file or Stream
                pdf.SaveAs("AwesomeLazyCacheAndIronPdf.pdf");
                return content;
            };
            // Get the cached value or add it if it doesn't exist
            string cachedValue = cache.GetOrAdd(cacheKey, expensiveLongRunMethod);
            Console.WriteLine(cachedValue);
        }
    }
}
using LazyCache;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeSample
{
    internal class LazyCacheDemo
    {
        public static void Execute()
        {
            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo LazyCache and IronPDF</h1>";
            content += "<h2>Create CachingService</h2>";
            // Create the cache service using caching logic
            IAppCache cache = new CachingService();
            content += "<p>IAppCache cache = new CachingService();</p>";
            var cacheKey = "uniqueKey";           
            content += "<p>string cachedValue = cache.GetOrAdd(cacheKey, expensiveMethod);</p>";
            // Define a factory method to generate the cacheable data
            Func<string> expensiveLongRunMethod = () => {
                var pdf = renderer.RenderHtmlAsPdf(content);
                // Export to a file or Stream
                pdf.SaveAs("AwesomeLazyCacheAndIronPdf.pdf");
                return content;
            };
            // Get the cached value or add it if it doesn't exist
            string cachedValue = cache.GetOrAdd(cacheKey, expensiveLongRunMethod);
            Console.WriteLine(cachedValue);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

コードの説明

  • レンダラのインスタンス化:ChromePdfRendererのインスタンスが作成され、HTMLコンテンツをPDF形式に変換します。
  • Define Content:HTMLコンテンツ("

    LazyCacheとIronPDFのデモ

    ", "

    CachingServiceの作成

    " など。)が用意されている。 このコンテンツはPDFにレンダリングされ、再利用のためにキャッシュされます。
  • キャッシュサービスの作成:キャッシュサービス(IAppCache)はLazyCacheのCachingServiceを使用してインスタンス化されます。この遅延キャッシュサービスは、キャッシュされたデータの保存と取得を管理します。
  • キャッシュ・キー:一意の識別子(「ユニークキー)は、キャッシュされたPDF内容を表すために割り当てられます。
  • 高価なメソッドの定義:ファクトリーメソッド(高価なロングラン・メソッド)はキャッシュ可能なデータを生成するために定義される。 このメソッドはChromePdfRendererを呼び出し、HTMLコンテンツをPDFとしてレンダリングします。 出来上がったPDFは保存され、文字列として返されます。
  • **取得またはキャッシュに追加します:サービスの GetOrAdd メソッドが呼び出され、cacheKey に関連付けられたキャッシュ値が取得されます。 値がキャッシュに存在しない場合、expensiveLongRunMethodが呼び出され、値を計算し、キャッシュに格納し、それを返す。 その値がすでにキャッシュされている場合は、そのまま返される。
  • 出力:キャッシュされたPDFコンテンツ(文字列として)がコンソールに出力される。(Console.WriteLine(キャッシュ値))キャッシュされたデータの検索を示している。

出力

LazyCache C#(開発者のための仕組み):図7 - コンソールの出力

PDF

C# LazyCache(開発者のための仕組み):図8 - PDF出力

IronPDFライセンス (試用版あり)

IronPDFパッケージの実行とPDF生成にはライセンスが必要です。 パッケージにアクセスする前に、アプリケーションの最初に次のコードを追加してください。

IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

トライアルライセンスありIronPdfのトライアルライセンスページに戻る.

結論

LazyCacheは、わかりやすいAPIとキャッシュ項目の自動有効期限を提供することで、C#アプリケーションでのキャッシュ実装を簡素化します。 LazyCacheをプロジェクトに統合することで、頻繁にアクセスされるデータを効率的にキャッシュし、待ち時間を短縮し、アトミックで整然とした方法でリソース利用を最適化することで、パフォーマンスを向上させることができます。 Webアプリケーション、API、サービスのいずれを構築する場合でも、LazyCacheはC#アプリケーションのパフォーマンスとスケーラビリティを向上させる貴重なツールとなります。

一方、IronPDFは.NETアプリケーションでPDFドキュメントを扱うための強力で多用途なC#ライブラリとして際立っている。 その強力な機能は、PDFの作成、編集、HTMLからPDFへのレンダリング、プログラムによるPDFの操作を網羅しています。 IronPDFは暗号化と電子署名によるセキュアなドキュメント処理機能を備え、PDFワークフローの効率的な管理とカスタマイズを可能にする。

< 以前
FluentEmail C# (開発者のための仕組み)
次へ >
DuckDB C# (開発者のための仕組み)