2

Scott Hanselman は最近、セッション/キャッシュに格納された文字列を圧縮する方法を説明するブログ記事を投稿しました。これはかなり有望に見えますが、セッション/キャッシュに保存しているデータの大部分は文字列ではなくカスタム クラスです。これらをどのように圧縮しますか?

私の最初の考えは、BinaryFormatter を使用して最初にオブジェクトをシリアル化し (カスタム クラス オブジェクトをセッション/キャッシュに格納するときに ASP.NET フレームワークが通常行うように)、次に結果のバイト配列を圧縮することです。ただし、これには、セッション/キャッシュから取得されたデータが読み取り専用になるという悪影響があります (解凍と逆シリアル化によって新しいメモリ内オブジェクトが作成されるため)。

つまり、コードが現在次のようになっている場合、そのストレージをセッションに圧縮する方法はありますか?

MyClass foo = new MyClass();
Session["foo"] = foo;

MyClass retrievedFoo1 = (MyClass) Session["foo"];
retrievedFoo1.Property1 = "property 1";

// retrievedFoo2.Property1 should equal "property 1"!
MyClass retrievedFoo2 = (MyClass) Session["foo"];
4

3 に答える 3

1

まず、セッション/キャッシュ内のデータを圧縮する必要がある理由を見ていきます。圧縮は最後の手段である必要があり、より良いプログラミングが最初に行われるべきです。

メモリが不足していますか? もしそうなら、どのオブジェクトが最も多く消費していますか? これにより、使用されるメモリ量を削減するためのコード改善の方向性が示されるはずです。

アプリが必要なオブジェクトでできる限り最適化されている場合は、データベースやファイル システムなどのメモリ不足のストレージを調べて、より大きなオブジェクトをキャッシュすることをお勧めします (シリアル化が役立つ場所です)。

InProc セッションを Web サーバーとは別のサーバーに配置して、スケーラビリティを向上させ、Web ファームにサイトを分散させることもできます。

于 2008-10-25T07:06:38.243 に答える
0

XMLシリアライザーを使用してXML形式に変換できますか?

于 2008-10-24T14:16:31.043 に答える
0

セッションの (過負荷) によるパフォーマンスの低下は、ストレージ サイズではなく、シリアライゼーション/デシリアライゼーションのオーバーヘッドによるものであると理解しています。パフォーマンスの問題を解決するために圧縮を検討している場合は、間違った道を進んでいると思います。(De) 圧縮はオーバーヘッドを増やすだけです。

キャッシュについて話している場合は、状況が少し異なります。しかし、あなたは具体的にセッションについて言及しています...


Scott の記事に対するあなたのコメントを読んだばかりで、あなたの質問に混乱しています。データベースに入れたり、ファイルに書き込んだ場合と同じように、セッション/キャッシュに何かを入れてデータの永続性を得ていることを本当に理解していないようです。圧縮は、あなたが求めていることを解決するつもりはありません。

于 2008-10-25T06:37:39.190 に答える