シリアル化はオブジェクトをバイトストリームに変換するため、永続化のためにプロセスから移動したり、別のプロセスに送信したりできます。 また、逆シリアル化は、バイトストリームをオブジェクトに戻す逆のプロセスです。
また、スタンドアロンキャッシュとは異なり、分散キャッシュはオブジェクトをシリアル化して、キャッシュクラスター内の別のコンピューターに送信できるようにする必要があります。 しかし、によって提供されるシリアル化メカニズム .NET framework XNUMXつの大きな問題があります。
1.非常に遅い:.NETシリアル化は、Reflectionを使用して実行時に型情報を検査します。 リフレクションは、プリコンパイルされたコードと比較して非常に遅いプロセスです。
2. 非常にかさばる: .NETシリアル化は、完全なクラス名、カルチャ、アセンブリの詳細、および他のインスタンスへの参照をメンバー変数に格納します。これにより、シリアル化されたバイトストリームは元のオブジェクトのサイズの何倍にもなります。
分散キャッシュはアプリケーションのパフォーマンスとスケーラビリティを向上させるために使用されるため、これを妨げるものはすべて非常に重要になります。 また、通常の.NETシリアル化は、分散キャッシュのパフォーマンスの大きなオーバーヘッドです。これは、メモリ内ストレージのために分散キャッシュに送信する前に、毎秒何千ものオブジェクトをシリアル化する必要があるためです。 また、ここでの速度低下は、分散キャッシュの速度低下になります。
もう2つの問題は、かさばるシリアル化されたバイトストリームが3〜XNUMX倍の余分なスペースを消費し、分散キャッシュの全体的なストレージ容量を減らすことです。 インメモリストレージはディスクストレージほど大きくなることはないため、分散キャッシュではこれがさらに敏感な問題になります。
.NETシリアル化の問題を克服するには、 NCache を実装しました コンパクトなシリアル化フレームワーク。 このフレームワークでは、 NCache 完全修飾アセンブリ/クラス名の代わりにXNUMXバイトのタイプIDを格納します。 フィールド値のみをシリアル化し、それらのタイプの詳細を除外することにより、シリアル化されたバイトストリームをさらに削減します。 ついに、 NCache Compact Serialization Frameworkは、インスタンスオブジェクトのフィールドとプロパティに直接アクセスすることでオーバーヘッドが発生するため、.NETReflectionの使用を回避します。
使用する方法はXNUMXつあります NCache アプリケーションでのコンパクトなシリアル化。
- しましょう NCache 実行時にコンパクトシリアル化コードを生成する
- ICompactSerializableインターフェースを自分で実装する
このブログでは、最初のアプローチのみに固執します。 XNUMX番目のアプローチについては別のブログで説明します。
しましょう NCache 実行時にコンパクトシリアル化コードを生成する
キャッシュしているオブジェクトのタイプを特定し、それらを登録します NCache 図に示すように、コンパクトシリアル化タイプとして。 それがあなたがしなければならないすべてです、そして NCache 残りは面倒を見る。
図1:コンパクトシリアル化のレジスタタイプ NCache
NCache 登録されたタイプをに送信します NCache 初期化時のクライアント。 受信したタイプに基づいて、 NCache クライアントは、各タイプをシリアル化および逆シリアル化するためのランタイムコードを生成します。 ランタイムコードは、によって一度だけ生成されます NCache 初期化時にクライアントであり、何度も使用されます。 Reflectionベースのシリアル化よりもはるかに高速に実行されます。
したがって、 NCache コンパクトなシリアル化により、分散キャッシュメモリを効率的に利用し、アプリケーションのパフォーマンスを向上させることができます。
だから、完全に機能する60日間の試用版をダウンロードしてください NCache Enterprise 自分で試してみてください。
こんにちは、
上記の2つのオプションをまとめたとのことですが。 いつIDEを介したコンパクトシリアル化を使用するのか、インターフェイスを実装するのか。
-ジェイブド