0

インターネット上のリモートロケーションでSQLServerデータベースを使用するvb.netアプリケーションを作成しました。

同時に動作している10個のvb.netクライアントがあります。

問題は、新しい行を挿入したり、データベースから行を取得したりするときに発生する遅延時間にあります。データベースを処理するときにフォームがしばらくフリーズしているように見えます。バックグラウンドワーカーを使用して克服したくないです。フリーズの問題。

その遅延時間をなくして、できるだけ減らしたい

事前に感謝し、ヒント、アドバイス、情報を歓迎します

4

3 に答える 3

3

さて、2つの問題:

データベースを処理するときにフォームがしばらくフリーズしているように見えますが、フリーズの問題を解決するためにバックグラウンドワーカーを使用したくありません。

虚栄心、傲慢、現実が混ざり合うことはめったにありません。短い時間(0.1〜0.5秒)を超える操作は非同期で実行する必要があります。これは、UIの応答性を維持する唯一の方法です。問題が何であるかに関係なく、それがインターネットアプリでより長くかかる可能性がある場合は、それらを切り離します。

だが:

問題は、新しいレコードを挿入したり、データベースからレコードを取得したりするときに発生する遅延時間にあります。

それで、問題は何ですか?真剣に。これはレイテンシーの問題ですか(ラウンドトリップが多すぎる、より効率的なSQL、バッチで作業するため、それぞれの後に結果を待つ20のq1uestionsを送信しない)、またはサーバーがオーバーロードされています-これが本当にレイテンシーであるかどうかは質問から明らかではありません問題。

最後に:

その遅延時間をなくしたい

物理学の規則(主に光速)を変えるためにあなたが信じるどんな神にも、あるいはあなたの地元の医師に、最終的に量子テレポーテーションを低コストで実行可能にするように祈ってください。パケットは移動するのに時間がかかり、それを変更する方法はありません。

あまりにも多くのラウンドトリップを使用していないかどうかを確認してください。SQLでSQLサーバーをリモートで使用しないでください(!)Webサービスを配置し、アプリケーションに適合させます。画面に1:1で一致する場合もあるため、1回の往復でデータを要求して更新を送信できます。十数ではありません。12年前に.NETのカスタムORMで同様のことを行ったとき、1回の実行で複数のクエリを受け入れ、それらの複数の結果セットを再利用するデータアクセスレイヤーを使用しました。そのため、10個のドロップダウンを持つフォームで10個すべてを要求できます。 1回の往復でのデータセット。リクエストのインターネット時間が0.1秒かかる場合、これにより0.9秒節約できます。往復(木を作る)が約100回(!)のフォームがあり、それを5回未満に減らしました。「時間がかかる」から「どうやってそこに」という話です。さらに、それは非同期でした、ごめんなさい。

次に、瞬時に高帯域幅の接続がない限り、大量のデータの移動が遅いことを認識してください。

これは非同期が何のために行われるかということです-最適化できない転送時間または待ち時間の問題があり、非同期を使用したくない場合は、ひどい体験を提供し続けてください。

于 2012-05-20T15:37:48.647 に答える
2

SQL呼び出しを非同期で実行し、Microsoftにバックグラウンドプロセスを処理させることができます。

http://msdn.microsoft.com/en-us/library/7szdt0kc.aspx

これはSQLサーバーからの応答時間を短縮しないことに注意してください。ネットワーク速度を改善するか、SQLステートメントのパフォーマンスを向上させる必要があるためです。

于 2012-05-20T14:57:24.120 に答える
1

物事をスピードアップするために潜在的にできることがいくつかありますが、コードを見ずに言うのは難しいです。

  1. 一般的な挿入を使用している場合-ストアドプロシージャの使用を開始します
  2. すべてのコマンドの後で接続を閉じている場合は...まあいけません。接続の確立は、通常、より「高価な」操作の1つです。
  3. 2つの間のパイプを増やします。
  4. インデックスを追加する
  5. SQL Serverを調査してください。おそらく、適切な方法でセットアップされていません。
于 2012-05-20T16:55:32.883 に答える