フッターコンテンツにスキップ
開発者向けアップデート

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

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

[キャッシング](https://en.wikipedia.org/wiki/Cache_(computing)は、このコンテキストにおける強力な最適化戦略ですMicrosoft.Extensions.Caching.Memory は、.NET アプリケーションに効率的なインメモリオブジェクトキャッシングソリューションを提供します。 PDF 中心のアプリは、MemoryCache キャッシュを IronPDF と共に戦略的に使用することで、はるかに速く動作し、応答します。

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

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

キャッシングは、多くの高性能.NETアプリケーションで使用される手法で、頻繁にアクセスされるデータをメモリに保存して迅速に取得できるようにします。 このアクセス可能なキャッシュオプションのうちの1つが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の例(PDF付き): 図1 - NuGetパッケージマネージャでMicrosoft.Extensions.Caching.Memoryを検索し、インストールする

スタートアップ.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

アプリケーションの仕様に応じて設定を変更します。

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

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つだけ作成し、それを使用することを保証します。

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;
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.Memory に取り組むために必要なネームスペースをインポートします。 私たちは、ControllerBase から派生した DemoController コントローラーを作成します。 このコントローラーは、HTTP 経由で送信されたクエリに応答します。コントローラーのコンストラクターには、IMemoryCache のインスタンスが注入されます。

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

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

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

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

結論

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

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

IronPDFはリーズナブルな価格で購入でき、パッケージを取得するとライセンスが一生有効になります。 このパッケージは$999から始まる一括料金でマルチシステム向けに優れた価値を提供します。 ライセンスを持つユーザーには、24時間体制でオンラインエンジニアリング支援が提供されます。 料金の詳細については、IronPDFライセンスページをご覧ください。 Iron Softwareに関するページを訪れて、Iron Softwareが製造する製品について詳しく学んでください。

よくある質問

Microsoft.Extensions.Caching.Memory for .NETアプリケーションにおける目的は何ですか?

Microsoft.Extensions.Caching.Memoryは、メモリ内オブジェクトキャッシングを提供することで、.NETアプリケーションのパフォーマンスを向上させます。頻繁にアクセスされるデータをメモリに保存することで迅速な取得が可能になり、特にIronPDFと併用することでPDF操作に役立ちます。

キャッシングは.NETでのPDF処理のパフォーマンスをどのように向上させることができますか?

キャッシングは頻繁に要求されるPDFデータをメモリに保存することで、処理時間やサーバー負荷を軽減します。IronPDFのようなライブラリと統合することで、PDFの作成や操作をより迅速に行うことができ、アプリケーション全体の速度と応答性を向上させます。

ASP.NET Coreアプリケーションでメモリ内キャッシングをどのように実装しますか?

ASP.NET Coreでは、Startup.csConfigureServicesメソッドにservices.AddMemoryCache()を追加することで、メモリ内キャッシュを実装できます。これにより、IronPDFとシームレスに統合され、効率的なPDF処理とデータ取得が可能になります。

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

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

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

一般的な設定オプションには、MemoryCacheEntryOptionsを使用して、有効期限ポリシー、サイズ制限、強制排除戦略を設定することが含まれます。これらの設定は、特にIronPDFを使用してPDFを扱う場合にキャッシングプロセスを最適化します。

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

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

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

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

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

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

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね