2011-07-04 15 views
3

Webサービスを構築しており、相当なデータが返されることが予想されます。大規模な結果を持つWebサービス

ASP.NetとIIS 6はどのようにこれを処理しますか?リソースの消費量を少なくするためには、どのようなことができますか?

例えば、私たちは現在、直列化可能なクラスを持っています。これは、別の直列化可能なクラス型の配列であるプロパティを持ちます。 Webサービスが呼び出されると、データベースから大量のレコードセットを照会し、クラスをインスタンス化し、配列プロパティを設定してから、シリアル化されたクラスを返します。

これはどのようにしてボンネットの下で処理されますか? DataSetオブジェクト全体がメモリに格納され、直列化可能なオブジェクト全体がメンバに格納され、シリアル化され、XML全体がメモリに格納され、最後に呼び出し元にストリームされると想像します。

結果がデータベースから読み込まれているときに結果をストリーミングするなど、メモリ消費を減らすためにできることはありますか?これは可能ですか?

+0

IIS上でホストされている旧式のWebサービスまたはWCFサービス? –

+0

旧式のWebサービス。 – Jeremy

+0

@Jeremy:答えは、「新しい開発に旧式のWebサービスを使用しない」です。 –

答えて

1

私はWCFを使用することに単純にスワップすることは答えです。質問は実際にはデータを要求する際の負荷です。

も、ご希望のサービスの方法を選択する前に考慮すべきいくつかのものがあります。

あなたがデータをキャッシュすることはできますか?インメモリにデータを格納することが可能な場合、データが要求されるたびに描画が行われないようにします。しかし、データのサイズが制限されている場合は、dbからファイルへのデータの書き込みとそこからのデータの提供を検討することができます。

VMモードでRedisのようなものを考えることができます。これにより、データをキャッシュすることができますが、頻繁にアクセスされなければ、データをファイルに書き込んで過度のメモリ使用を防ぐことができます。

データベースへの呼び出しがいくつかのより効率的な呼び出しに分割される可能性はありますか?

呼び出しを実行するのにかかる時間が長い場合は、データを非同期に呼び出すことを検討できます。

最後に、データがWebサービスとして提供されることは不可欠ですか?データをXML文書として扱うことはできますか?

+0

WCFは、この問題を解決するために、一度に4つのメッセージをメモリにコピーしないでください。第二に、実用的であれば、WCFサービスはHTTPとSOAPの代わりにTCP/IPとバイナリを使用できます。第3に、必要に応じて、WCFは真のストリーミングを行うことができます。 –

+0

@ジョン - 呼び出し側のアプリケーションがtranditional Webサービスモデルのみをサポートしている場合、WCFは真のストリーミングを行うことができますか? – Jeremy

+0

@ジョン:私はWCFが優れており、適切なサービスであることに同意しますが、私が述べるように、サービスを選択する前に、他のことを考慮する必要があります。 – Digbyswift

関連する問題