0

私は、日常業務の一環として、多くのデータベースを更新する約 35 のバッチに取り組んでいます。それらのすべてのバッチは、1 つの Web アプリで開発されました。データベースの問題により、DB 接続プールを利用するためにそれらすべてを 1 つの Windows アプリケーションに収集し、バッチごとに 1 つのバックグラウンドワーカーを割り当てました。アプリケーションで 20 バッチに達し、すべてがうまく機能しています。しかし、他のバッチに他のバックグラウンドワーカーを追加すると、アプリケーションがハングします。これは、1 つのプロセスで実行しているスレッドが多すぎるためだと思います。たとえば、アプリケーションを多くのプロセスで動作させるなど、この問題の解決策はありますか??!!!. よろしく、

このアプリケーションには 1 台のマシン (Core i7 CPU、8 GB RAM) を割り当てていることに注意してください。

4

2 に答える 2

0

更新する必要があるデータベースはいくつありますか?

データベースの数としてスレッドの数を持っている方が推奨されると思います

于 2013-10-20T13:29:57.603 に答える
0

多くのバックグラウンド ワーカーがアクティブなときに UI がフリーズし、それらのバックグラウンド ワーカーの処理が終了すると回復する場合、UI スレッドは、バックグラウンド ワーカー スレッドの 1 つからの結果またはシグナルを待機するメソッドを実行している可能性があります。

問題を解決するには、同期/マルチスレッドを処理する UI 関連のコードを探す必要があります。これは、.NET の多くの同期オブジェクトの 1 つ (ステートメントを含む) が使用されている場所である可能性がありますがlock、「ダム」ポーリング ループ a-ka が含まれる可能性もありますwhile(!worker.IsFinished) Thread.Sleep();

フリーズする別の理由として、バックグラウンド スレッドではなく UI スレッドで誤ってワーカー (またはワーカー関連のメソッド) を実行している可能性があります。

ただし、デバッガを使用するとわかります。

問題のあるメソッドの探索範囲を管理できるようにするには、UI がフリーズするまでプログラムをデバッガーで実行します。その時点で、デバッガーでプログラムの実行を一時停止します。そのとき UI スレッドが処理しているコードを調べると、問題のあるコードのインスタンスが 1 つ見つかります。(何が間違っていても、私はあなたに言うことができません - 私はあなたのコードを知らないからです。)

コード内のさまざまな UI 関連のメソッドが同じ問題に悩まされる可能性は十分にあります。したがって、問題のあるコードを見つけた (そしてそれを修正できた) 場合は、他の問題のある方法をチェックしたいと思うでしょうが、その時点で何を探すべきかがわかるので、それはかなり簡単なはずです...

于 2013-10-20T14:22:29.227 に答える