私はC#で書かれたWPFアプリケーションを持っています。何千ものオブジェクトをインスタンス化する必要があります。データベースサーバーからデータを取得した後、時間がかかる計算量の計算を実行する必要があります。プロセス全体には20〜30秒かかり、その80%は計算から来ています。WCFサービスオブジェクトの転送が遅い。それは普通ですか?
この問題の解決に役立つように、既に実行されたcalcで既にインスタンス化されたオブジェクトのコピーを保持し、要求に応じてインスタンス化されたオブジェクトを呼び出し元のクライアントに転送するWCFサービスを作成しました。
しかし、それは遅いです...本当に遅いです。元の方法よりもはるかに低速です。 WCFサービスからすべてのオブジェクトを転送するのに3〜4分かかるため、目的を破ってしまいます。
私は、サービスをバッファリングする代わりにストリーミングを試み、クライアントとサーバーの設定ファイルのさまざまなサービスオプションを増減しましたが、実際の設定にはまだ違いがありません。
この低速が予想されるのですか、それとも速くなければならず、いくつかのオプションを変更するだけですか?もしそうなら、どのようなオプションがありますか?
これは、シリアライズに至る可能性があります。どのプロトコルエンドポイントを使用していますか?そして、どのようにオブジェクトが「大きく」なっていますか? –
私はBasicHTTPBindingを使用します。オブジェクトは[Serializable]属性でシリアル化されます。すべてのオブジェクトの合計サイズは約350 MBです。 – Nullqwerty
WCFでの私のお勧めは、電線で必要なデータだけを渡すことです。このため、私はしばしば、WCFに出入りするデータを可能な限り小さく保つために生データを含む 'DTO'または' POCO'オブジェクトで作業します。WCFはアイテムをローカルで実行するよりも処理速度が遅くなります。なぜなら、サーバーに移動してデータを取得するだけでなく、メモリからデータを取得する必要があるからです。実行している計算の種類は、計算結果をオブジェクト自体に保存できないだけですか? – Rachel