.NET ヘルプ

C#におけるMicrosoft.Extensions.Caching.Memoryの例(PDF付き)

公開済み 2024年6月6日
共有:

.NETアプリケーションでは、レスポンスよく効果的にアプリケーションを構築するために、最適化手法が頻繁に必要となります。 キャッシュとは、分散型キャッシュに頻繁に要求される素材を一時的に保存することで、より高速な取得を実現する強力な手法です。 この戦略による処理時間およびサーバー負荷の削減は、アプリケーションのパフォーマンスを大幅に向上させる可能性があります。 さらに、パフォーマンスカウンターを実装することで、キャッシュシステムの監視と強化が可能です。

キャッシュこの文脈では強力な最適化戦略です。 Microsoft.Extensions.Caching.Memory は、.NET アプリケーション向けの効率的なインメモリオブジェクトキャッシュソリューションを提供します。 PDF中心のアプリケーションは、IronPDFと組み合わせてMemoryCacheキャッシュを戦略的に使用することで、より高速に操作・応答します。

Microsoft.Extensions.Caching.Memory`のC#サンプルとIronPDFを効率的に統合する方法を探ります。 この記事では、キャッシングに関する利点について論じます。IronPDF HTMLからPDFへの変換プロセスについて説明し、有用な実装のヒントをいくつか提供し、IronPDFプログラムでキャッシュを構成するための詳細なウォークスルーを提供します。 最終的には、効果的で直感的なPDFアプリケーションを開発するためのスキルとリソースを持つことができます。

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

キャッシングは、多くのハイパフォーマンスな .NET アプリケーションで使用される手法であり、よくアクセスされるデータをメモリに保存して迅速に取得することができます。 Microsoft.Extensionsは、利用可能な多くのキャッシングオプションの1つです。 Caching.Memoryは特に強力で適応性の高いオプションです。 このライブラリーは、より大きな Microsoft.Extensions.Caching 名前空間のコンポーネントであり、シンプルながらも効果的なメモリ内キャッシュアプローチを提供します。

Microsoft.Extensions.Caching.Memory の主要な型

IMemoryCache

  • インメモリキャッシュを利用するための基本的な機能は、このインターフェースによって表されます。 キャッシュされたエントリを管理し、追加、取得、削除する方法を提供します。
  • キャッシングプロセスの主要なエントリーポイントとして考えてください。

MemoryCache(メモリーキャッシュ)

  • 実際の IMemoryCache の実装はこのクラスにあります。 キャッシュされたアイテムに対する管理およびリアルなインメモリストレージを提供します。
  • 依存性注入は通常、ASP.NET CoreアプリケーションでMemoryCacheのインスタンスを取得するために使用されます。

    MemoryCacheEntryOptions

メモリーキャッシュエントリーオプション

このクラスを使用して特定のキャッシュアイテムの設定を指定することができます。 これらの設定は次のようなことを制御します:

  • 有効期限: スライディング有効期限ウィンドウを構成することができます(エントリが特定の間隔内にアクセスされない場合、有効期限が切れます)または絶対有効期限(エントリが自動的に期限切れになる場所).
  • 優先順位: キャッシュがいっぱいになると、アイテムを削除するかどうかに影響します。 優先度の高いエントリは、削除される可能性が低くなります。
  • ポストエビクションコールバック (ポストエビクション コールバック):これにより、データの有効期限が切れた際の処理ロジックを微調整することができます。 以下の内容を日本語に翻訳してください:

これは、重要なデータを更新する必要があるシナリオ、リソース管理、およびログ記録において特に役立ちます。

CacheEntry (キャッシュエントリー)

  • キャッシュ内では、このタイプは単一のエントリを示します。 それは、サイズの詳細、期限設定、キャッシュされた値を取得するためのメソッドと属性を提供します。
  • 本質的には、キャッシュに保持されている特定のデータに関するすべての情報が含まれています。 ICacheEntry
  • このインターフェースはキャッシュアイテムに対して実行できる基本的なアクティビティを概説していますが、基本的なキャッシング操作には必須ではありません。 次の内容は、値と有効期限の詳細を取得する方法に関する指示を含んでいます。 これは文字列キーを取得する必要があるシナリオでより一般的です。
  • このインターフェイスは、これらの機能の実用的な実装を提供する CacheEntry クラスによって実装されています。

Microsoft.Extensions.Caching.Memory をインストールおよび設定

Microsoft.Extensions.Caching の構成。 アプリケーションの起動中、メモリはASP.NET Coreアプリケーションのサービスコレクション内でキャッシュサービスを構成するために使用されます。 以下に「Microsoft.Extensions.Caching.Memory」が構成されたASP.NET Coreアプリケーションを示します:

必要なNuGetパッケージをインストールする

まず、プロジェクトに Microsoft.Extensions.Caching.Memory をインストールしてください。 NuGet パッケージ マネージャー コンソールを使用して、次のコマンドでインストールできます:

Install-Package Microsoft.Extensions.Caching.Memory

あるいは、NuGetパッケージマネージャーを使用してパッケージをインストールすることもできます:

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

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
VB   C#

メモリキャッシュサービスオブジェクトは、このコードによってアプリケーションのサービスコレクションに追加され、設定されます。 メモリキャッシュシステムサービスは、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
VB   C#

データをメモリからキャッシュおよび取得するためのメソッドは、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
VB   C#

アプリケーションの仕様に従って設定を変更してください。

これらの指示は Microsoft.Extensions を構成するのに役立ちます。 ASP.NET Coreアプリケーションで、Caching.Memoryを使用します。 アプリケーションは、頻繁にアクセスされるデータをメモリキャッシュに保存および取得することで、より迅速かつ効率的に動作できます。

はじめに

IronPDFとは何ですか?

有名な.NETライブラリであるIronPDFの助けを借りることで、プログラマーは.NETアプリケーション内でPDFドキュメントを生成、編集、表示することができます。 HTMLコンテンツ、写真、または生データからPDFを作成することは、PDF操作機能の一つに過ぎません。 他の機能には、既存のPDFドキュメントにテキスト、画像、および図形を追加すること、HTMLページをPDFに変換すること、そしてPDFからテキストおよび画像を抽出することが含まれます。

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

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

NuGetパッケージをインストールする

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

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
VB   C#

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;
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;
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
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
VB   C#

MicrosoftとASP.NETを使用するために必要な名前空間 Microsoft.Extensions.Caching.Memory をインポートします。 私たちは ControllerBase から派生した DemoController コントローラーを作成します。 このコントローラーはHTTP経由で送信されたクエリに応答します。IMemoryCacheのインスタンスがコントローラーのコンストラクターに注入されます。

サービスの寿命を制御するために、メモリキャッシュを含むASP.NET Coreは依存性注入を提供します。 次のプログラムを使うと、IronPDF を使って最新の PDF 機能を体験できます。IronPDF は、.NET、Java、Python、Node.js の各プラットフォームで利用可能で、PDF の生成、編集、抽出など、豊富な機能を備えています。IronPDF の使い方を習得すれば、複雑な PDF タスクも簡単に実行できます。

IronOCR もまた、強力な OCR 機能を提供し、さまざまなタイプのドキュメントからテキストを抽出するのに役立ちます。特に .NET 環境での利用に最適化されています。

加えて、IronXL は .NET と Python でのエクセルファイルの操作を簡単にするツールを提供します。IronBarcode と IronQR も同様に、バーコードと QR コードの生成と読み取りを簡単に実行できます。

IronZIP は、.NET 環境での圧縮と解凍を一元管理するツールで、ファイルの管理がより効率的になります。IronWord は、.NET での Word ドキュメントの操作をサポートし、文書の生成や編集を容易にします。IronPrint により、.NET アプリケーションから直接印刷ジョブを送ることができます。

さらに、IronWebscraper はウェブページのデータを自動的に抽出し、効率的なデータ収集を可能にします。

Iron Suite を使ってこれらすべてのツールを統合することで、開発者はさらに強力なアプリケーションを構築できます。[HttpGet]指定されたルートからストアへのHTTP GETリクエストを処理するために、プロパティが適用された状態では、Generateメソッドがマークされます。(/デモ). 与えられたキャッシュキーを使用して、Generate関数内のキャッシュから天気予報データを取得しようとします。 データがキャッシュにあるASPで使用できない場合、Generate関数を使用して新しい気象データを生成します。

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

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

Microsoft.Extensions.Caching.Memory の例(PDF付き)C#: 図2 - 上記コードの出力例

結論

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

Microsoft.Extensions'の機能を活用し、ダイナミックPDF作成のためのIronPDFと効果的なデータキャッシュのためのCaching.Memory`の助けを借りて、.NET開発者はアプリの速度を大幅に向上させることができます。この強力な組み合わせにより、開発者はサーバーの負荷を軽減し、ユーザー体験を向上させ、処理のオーバーヘッドを排除することで、高性能でスケーラブル、かつ応答性の高いアプリケーションを簡単に設計することができる。

IronPDFは手頃な価格で購入でき、パッケージの購入には永久ライセンスが含まれます。 このパッケージは、複数のシステムに対応する単一の料金である $749 から始まるため、優れた価値を提供します。 ライセンスをお持ちのユーザーには、24時間365日オンラインのエンジニアリングサポートを提供します。 料金の詳細については、以下のページをご覧くださいIronPDF ライセンスページ. こちらをご覧くださいIron Softwareに関するページIron Softwareの製品については、こちらをご覧ください。

< 以前
OpenAPI .NET(開発者向けの仕組み)
次へ >
Ocelot .NET (開発者にとっての動作方法)