2011-08-16 6 views
2

多くのオブジェクトが作成され、そのプロパティがユーザーによって頻繁に変更されるアプリケーションがあります。サーバーにはさまざまなモジュールがあり、各モジュールごとに1つのセッションが作成されます。各セッションは、1つのクライアントと1つのメインアプリを実行するユーザーで構成されています。ユーザーはオブジェクトに干渉し、そのプロパティを変更します。現在、Windowsフォームでプロパティグリッドを使用しています。クライアントがメインアプリにどのように接続するのかはまだ決まっていません。私は二重WCFサービスを考えています。サーバーオブジェクトのUI表現

  1. クライアントUIでのリモートオブジェクトの表現方法を教えてください。私は、VSフォームデザイナーでUIアイテムを手動で作成し、マッピングXMLファイルを配置することを考えていました。初期化時のUIはマッピングテーブルを使用して各UIエレメントのプロパティの詳細を取得し、それに応じて変更します。 UIのパネルのように、マップされたオブジェクトのフォールト状態が真であるときに色が塗りつぶされます。

  2. サーバー上のオブジェクトが頻繁に変更されているため、クライアントにUIを更新するように指示する最良の方法は何ですか。私はクライアントが特定のオブジェクトのために登録されている場合、彼はオブジェクトの変更を通知される二重WCFを考えていました。私の質問は、私たちが私の目標を達成するために

    interface IChange 
    { 
        string ObjectName { get; set; } 
        string PropertyName { get; set; } 
        object NewValue { get; set; } 
        object OldValue { get; set; } 
    } 
    

が私を提案する代替またはより良い方法を(新しいタイプに包まれた)オブジェクトIDと共にクライアントのみ更新プロパティにオブジェクト全体を転送する必要がありますです

編集

今のところ、オブジェクトの数はそれほど多くはありませんが、大幅に増加する可能性があります。このアプリケーションはプラグインベースであり、開発者は数千のオブジェクトを追加することができます+複数のプラグインが存在する可能性があります。オブジェクトのサイズ私は10-20kBを超えるとは思っていませんが、明確ではありません。ポイントは私がクライアントにオブジェクト全体を送る場合です(オブジェクトの90%は役に立たず、更新されたプロパティのみがクライアントに関連します)。クライアントはすべてのプロパティをスキャンしてUIを更新する必要があります。しかし、クライアントに変更を送信するだけであれば、クライアントは何を変更するかを知っています。オブジェクトの更新は非常に頻繁に起こる可能性があります。オブジェクトの1つのプロパティが変更されると、他のオブジェクトへのいくつかの変更(連鎖反応の一種)が発生し、すべての変更を通知する必要があります。たとえば、家のメインスイッチのIsOnプロパティを変更すると、すべてのアプライアンスがシャットダウンされます。このようなオブジェクトの変更は、すべてクライアントに通知する必要があります。クライアントが各オブジェクトのシャットダウンを通知すると、実行中でないUI上のすべてのアプライアンスが表示されます。

+0

通常、オブジェクトはどのくらいの頻度で変更されますか? –

答えて

0

私の質問は、私たちが(新しいタイプに包まれた)オブジェクトIDと共にクライアントのみ更新プロパティにオブジェクト全体を転送する必要があるのですか?

パフォーマンス:データ・オブジェクトがどのように大きな依存し、どのように多くの変化を誰時。たとえば、1000個のオブジェクトがあり、それぞれが1Mbのサイズで1000個の異なるプロパティを持ち、平均でわずか1〜2の小さな変更が行われた場合、変更を送信するだけです。

  • 少ないネットワーク負荷
  • 少ないメモリ/処理の集中
  • あなたがXMLの多くをデシリアライズする必要がある場合は特にそう。

複雑:時にはそれだけ変わったの何かを吹き飛ばすし、ゼロからスタートする方が簡単です。サーバー上のオブジェクトが頻繁に変化しているので、あなたがするクライアントに伝えるための最良の の方法は何か、

など、同じオブジェクトに対して複数の変更を処理し、オブジェクトの状態を維持することについてはあまり心配する必要はありません。 UIを更新しますか?

は、彼らが変化すると、彼らがどこから来た(「クライアントがメインのアプリに接続する方法を決定するために、まだです」)頻度そうなオブジェクトの数に戻ってきます。また、UIがどのように最新である必要があるかによって異なります。サーバー上でオブジェクトが変更され、更新が必要なクライアントが100台ある場合、更新する必要があります。

より頻繁で速いものは、アプリケーションがより多くの「チャット」を変更し、より多くの境界(ドメイン、プロセス、サーバー、ネットワークなど)を超えるパフォーマンスを殺すようになります。 。

編集

unit of workパターンが役立つかもしれないようなので、それが聞こえる:

  • すべてのノックオンの変更、変更要求が入ってきたときに効果を見てみましょう
  • そして、すべての変更を発行します。 (デルタはオブジェクト全体ではなく)呼び出し元への単一の「バッチ」/コレクションとして返されます。
  • 新しいデータが必要なクライアントがたくさんある場合は、多少のキャッシュを使用するかもしれません。
+0

メインの質問の編集を参照 – hungryMind

関連する問題