.NET ヘルプ

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

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

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

私たちは、Microsoft.Extensions.Caching.Memory 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

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

  • 有効期限: スライディング有効期限ウィンドウを設定できる(一定の間隔内にアクセスされない場合にエントリが期限切れになる)、または絶対有効期限を設定できる(エントリが自動的に期限切れになる)。
  • 優先順位: キャッシュがいっぱいになると、アイテムを削除するかどうかに影響します。 優先度の高いエントリは、削除される可能性が低くなります。
  • ポストエビクションコールバック (Post-eviction callback):これにより、データの有効期限が切れた際の処理ロジックを微調整することができます。 これは、重要なデータの更新が必要なシナリオ、リソース管理、およびログ記録において特に役立ちます。

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
Install-Package Microsoft.Extensions.Caching.Memory
SHELL

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

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

Startup.csでサービスを構成する

ASP.NET Core アプリで ConfigureServices メソッドに移動するには、Startup.cs ファイルを開いてください。メモリーキャッシュサービスを設定するには、次のコードを追加してください。

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

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

これらの手順は、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

ASP.NET Core アプリケーション内で ConfigureServices 関数にアクセスするには、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 のインスタンスを 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;
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
$vbLabelText   $csharpLabel

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

サービスの寿命を制御するために、メモリキャッシュを含むASP.NET Coreは依存性注入を提供します。 [HttpGet] プロパティが適用されると、Generate メソッドは指定されたルート (/Demo) からストアへの HTTP GET リクエストを処理するように指定されています。 与えられたキャッシュキーを使用して、Generate関数内のキャッシュから天気予報データを取得しようとします。 データがキャッシュにあるASPで使用できない場合、Generate関数を使用して新しい気象データを生成します。

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

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

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

結論

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

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

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

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
OpenAPI .NET(開発者向けの仕組み)
次へ >
Ocelot .NET (開発者にとっての動作方法)