3

次のシナリオのオプションを知りたいのですが。

国内の多くのオフィスにC#winformsアプリケーション(VS 2010で開発)を配布しています。アプリケーションは、別の場所にあるメインサーバー上にあるC#Webサービスと通信し、別の場所に1つのデータベース(SQL Server 2012)があります。(すべてのサーバーはWindows Server 2008を実行します)

本社(現在の場所)は、同じフロントエンドを使用して、すべてのオフィスがリアルタイムですぐに利用できる必要があるデータベース上の特定の情報を管理します。同時に、サイト全体の統計を監視するリアルタイムのダッシュボードWebアプリケーションがあるため、変更されたデータは本社ですぐに利用できる必要があります。

現在、ユーザーはアプリケーションの動作速度について不満を持っています。彼らはそれが本当に遅いと言います。私たちはビジネスクリティカルな環境で働いており、毎分待つことはクライアントを失うことを意味するかもしれません。

私は次のオプションを調査しましたが、DBのバックグラウンドから来たものではないため、私のシナリオに最適なルートが何であるかがよくわかりません。

  • ターミナルサービス/セッション(本社で実装したばかりで、大きな改善だと言われていますが、誰かのデスクトップにリモート接続するなど、作業に適していません。)
  • トランザクションレプリケーション(私のシナリオでは非常に妥当なもののように聞こえますが、すべてのオフィスが個々のサーバーに独自のSQLサーバーデータベースを持っている必要があり、担当しているすべてのものを「いじくり回して」壊す傾向があります!)すべてのサーバーを引き継ぐこともできますが、それらはフランチャイズであるため、サイトに独自のIT担当者がいます。)

現在、アプリケーションの起動時に大量のルックアップデータがキャッシュされていますが、これも完了するまでに2〜3分かかりますが、これは受け入れられません。

誰かアイデアはありますか?

4

1 に答える 1

2

すべてがWebサービスを介して実行されているため、追加のSQLServerをクライアントのローカルに展開する必要はありません。WSもローカルにデプロイされていない限り、WSはこれらのデータベースと通信できません。

特定の改善を提案する前に、ボトルネックが発生している場所をベンチマークする必要があります。さまざまなクライアントとWebサービスの間、およびWebサービスとデータベースからの遅延はどのくらいですか?データベースには待機が表示されていますか?最悪のシナリオがわかったら、それを改善してから、作業を進めてください。

ただし、いくつかの一般的な考え:

  • WSをデータベースに近づけます
  • Webサービスレベルでデータをキャッシュして、DB呼び出しを節約します
  • WSが呼び出す費用を見つけて、スループットを最適化してみてください
  • ルックアップデータがそれほど頻繁に変更されない場合は、SQL CEのローカルコピーを使用してそのデータをキャッシュし、MSSyncFrameworkを使用してデータをSQLServerに同期させます。
  • クライアントコンピューター上のすべてにSQLCEを使用し、バックグラウンドプロセスを使用してクライアントとWSの間で同期します

更新あなたのコメントの後、2つの追加の考え。Webサービスのペイロードが大きい場合は、Webサービスに圧縮を追加してみてください(まだ実装されていない場合)。

スレッド内で、またはasync /awaitを使用して.NET4.5を使用している場合は、WS呼び出しを非同期で実行するようにクライアントを更新することもできます。これにより、少なくともクライアントはUIを使用できるようになりますが、データの読み込み時間に関する問題を修正する必要はありません。

于 2013-01-30T10:19:54.997 に答える