フッターコンテンツにスキップ
.NETヘルプ

Microsoft.Extensions.Caching.Memoryの例(PDF付き)in C#

アプリケーションを迅速かつ効果的に構築するには、.NETアプリケーションに最適化手法が必要になることがよくあります。 キャッシングは、要求される頻度が高い素材を一時的に分散キャッシュに保存し、より迅速な取得を可能にする強力なアプローチです。 この戦略により処理時間とサーバー負荷の軽減が達成され、アプリケーションパフォーマンスが大幅に向上することがあります。 さらに、パフォーマンスカウンターを実装してキャッシングシステムを監視し、改善することができます。

キャッシングは、このコンテキストで強力な最適化戦略です。 Microsoft.Extensions.Caching.Memory は、.NETアプリケーション向けに効率的なインメモリオブジェクトキャッシングソリューションを提供します。 あなたのPDF中心のアプリは、MemoryCacheキャッシュをIronPDFと戦略的に使用することで、動作がより迅速に、そして応答性も高くなります。

<code>Microsoft.Extensions.Caching.Memory</code>のC#例をIronPDFに効率的に統合する方法を探ります。 この記事では、IronPDF HTMLからPDFへの変換プロセスに関連するキャッシングの利点を議論し、有用な実装のヒントを紹介し、IronPDFプログラムでキャッシングを構成するための詳細な説明を提供します。 最終的には、効果的で直感的なPDFアプリケーションを開発するために必要なスキルとリソースを手に入れることができます。

Microsoft.Extensions.Caching.Memory: .NETにおけるキャッシングの基盤

キャッシングは、多くの高性能.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パッケージマネージャーを使用することができます:

C#でのMicrosoft.Extensions.Caching.Memoryの例(With PDF):図1 - NuGetパッケージマネージャーでMicrosoft.Extensions.Caching.Memoryを検索し、インストール

スタートアップ.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とは何ですか?

IronPDFという有名な.NETライブラリの助けを借りて、プログラマーは.NETアプリケーション内でPDFドキュメントを生成、編集、表示できます。 HTMLコンテンツ、画像、または生データからPDFを作成することは、PDFを扱うために提供される多くの機能の1つです。 他の機能には、既存のPDFドキュメントへのテキスト、画像、形状の追加、HTMLページのPDFへの変換、およびPDFからのテキストおよび画像の抽出が含まれています。

以下にIronPDFの機能をいくつか示します:

  • HTML、PNG、および未処理のデータからのPDF作成。
  • PDFからの画像およびテキストの抽出。
  • PDFのヘッダー、フッター、透かしの追加。
  • パスワード保護および暗号化を使用したPDFドキュメント。
  • フォームの記入およびデジタル署名機能。

NuGetパッケージのインストール

プロジェクトにIronPDFパッケージがインストールされていることを確認します。 NuGetパッケージマネージャーコンソールを使用してインストールできます:

Install-Package IronPdf

Startup.csファイルをASP.NET Coreアプリケーションで開き、ConfigureServices関数にアクセスします。 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のインスタンスを1つのみ作成して使用することを保証します。

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
$vbLabelText   $csharpLabel

MicrosoftおよびASP.NETと共に作業するために必要な名前空間をインポートします Microsoft.Extensions.Caching.MemoryControllerBaseから派生したDemoControllerコントローラーを作成します。 このコントローラーは、HTTPを介して送信されたクエリに応答します。IMemoryCacheのインスタンスは、コントローラーのコンストラクターに注入されます。

ASP.NET Coreは、メモリキャッシュを含むサービスのライフタイムを管理するための依存性注入を提供します。 [HttpGet]属性を適用して、指定されたルート (/Demo) からのHTTP GETリクエストを処理するためにGenerateメソッドをマークします。 指定されたキャッシュキーを使用してキャッシュからPDFデータを取得しようとします。 キャッシュにデータが見つからない場合、GeneratePdf関数を使用して新しいPDFを作成します。

複数のアプリサーバーがある場合、すべてのサーバーで一貫したキャッシュ処理を行うために分散キャッシングを構成してください。

Microsoft.Extensions.Caching.Memoryを活用してデータをキャッシュし、ASP.NET Coreアプリケーションでパフォーマンスを向上させるために、提供されたドキュメントおよびサンプルコードを参照してください。 実際には、アプリケーションのニーズに合わせて有効期限ポリシー、キャッシュキー、キャッシング動作を調整できます。 生成に費用がかかるデータまたは複数のスレッドによって頻繁にアクセスされるデータをキャッシュすることで、全体的なユーザーエクスペリエンスを向上させ、応答時間を劇的に短縮できます。

C#でのMicrosoft.Extensions.Caching.Memoryの例(With PDF):図2 - 上記のコードからの出力例

結論

総合的に見て、Microsoft.Extensions.Caching.Memoryを使用することで、特にASP.NET Coreフレームワークに基づいた.NETアプリケーションのスケーラビリティおよびパフォーマンスを向上させることができます。 開発者は、インメモリキャッシングを活用してユーザーエクスペリエンスを改善し、レイテンシを最小限にし、データアクセスを最適化できます。 ライブラリは、リファレンスデータ、クエリ結果、または計算値をキャッシュするための、特定のアプリケーション要件に合わせたキャッシング戦略を開発するための柔軟でユーザーフレンドリーなAPIを提供します。 キャッシングのベストプラクティスを採用し、.NETアプリにMicrosoft.Extensions.Caching.Memoryを追加することで、目に見えて速度が向上し、アプリケーションの応答性が高まります。

.NET開発者は、IronPDFを活用した動的PDF作成とを活用した効率的なデータキャッシングを駆使することで、アプリの速度を大幅に向上させることができます。この強力な組み合わせにより、開発者はサーバー負荷を軽減し、ユーザーエクスペリエンスを向上させ、処理のオーバーヘッドを排除しながら、高性能でスケーラブルで応答性の高いアプリケーションを簡単に設計することが可能になります。

IronPDFはリーズナブルな価格で購入でき、パッケージを取得するとライセンスが一生有効になります。 パッケージは、$799で始まる単一の料金で複数のシステムに対応し、優れた価値を提供します。 ライセンスを持つユーザーには、24時間体制でオンラインエンジニアリング支援が提供されます。 料金の詳細については、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では、`ConfigureServices`メソッド内で`services.AddMemoryCache()`を追加することでメモリ内キャッシングを実装できます。これは、効率的なPDF処理およびデータ取得のためにIronPDFとシームレスに統合されます。

キャッシングにおけるIMemoryCacheの役割は何ですか?

IMemoryCacheは、.NETアプリケーションにおけるキャッシュエントリを効果的に管理するためのインターフェイスです。IronPDFと組み合わせることで、開発者はPDFデータを迅速に保存および取得することができ、アプリケーションのパフォーマンスを向上させます。

キャッシングの一般的な構成オプションは.NETで何ですか?

一般的な構成オプションには、`MemoryCacheEntryOptions`を使用した有効期限ポリシー、サイズ制限、エビクション戦略の設定が含まれます。これらの構成は、PDF処理のためにIronPDFを使用する際にキャッシングプロセスを最適化します。

開発者は.NETアプリケーションで動的PDFをどのように作成できますか?

開発者はIronPDFを使用して.NETアプリケーションで動的PDFを作成できます。HTMLからPDFへの変換、ヘッダーやフッターの追加などをサポートしており、PDFの生成と操作において多目的なツールとなります。

キャッシングを.NETでのPDF生成と統合することの利点は何ですか?

IronPDFを使用した.NETアプリケーションでのPDF生成にキャッシングを統合すると、速度が大幅に向上し、待ち時間が短縮されます。これにより、頻繁に使用されるデータへのアクセスが速くなり、ユーザーエクスペリエンスが向上し、アプリケーションがよりスケーラブルになります。

どのようにして.NETアプリケーションのキャッシングシステムを監視し、強化することができますか?

パフォーマンスカウンターを実装することで、.NETアプリケーション内のキャッシングシステムの効率を監視できます。この監視により、調整や強化が可能になり、特にPDFタスクにIronPDFを使用する際に最適なパフォーマンスが確保されます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。