アプリケーションで作業していて、TeamViewer と Radmin を介してリモート接続すると、アプリケーションがフリーズすることがわかりました。
フリーズしても例外は発生せず、UI が応答しなくなり、リソース モニターまたはプロセス エクスプローラーでプロセスがハングすることはありません。
アプリケーションの基本仕様: 2 つの COM ポートに接続します。1 つは入力用、もう 1 つは出力用です。出力 COM には、5 秒ごとにキープアライブ信号も必要です。UI の更新から音声出力、データ入力の処理まで、さまざまなタスクを実行する 4 つのバックグラウンド ワーカー スレッドがあります。UI には、3 つの個別のデータ ソースからのデータがリアルタイムで表示されます。2 つは COM ポートで、1 つは MS SQL です。
RDP はアプリケーションをまったくハングさせません。
これを引き起こしている可能性のあるものについてのアイデアはありますか?
SQL 2012 バックエンドを備えた VS Ultimate 2013 に組み込まれた .NET 4.5.1 で実行されています。
64ビットと32ビットの間で変更を試みましたが、進歩もありませんでした。
fsintegral への応答を編集します。
- アプリケーション内のすべてのループは終了しますが、非常に頻繁に呼び出されます。各タイマーには 1.5 ~ 5 秒の繰り返しがあり、タイマー内のプロセスがティック時間よりも長くかかる場合があります。タイマーはすべてバックグラウンド ワーカーを呼び出し、重複を避けるためにプロセスを開始する前に .isBusy をチェックします。
タイマーは無限に実行されることを意図していますが、これは無限ループとは異なります。
非表示のダイアログ ボックスを確認する方法はありますか? 存在するとは思いませんが、確認する方法を知りたいです。
バックグラウンド ワーカーごとのデータ読み込み時間を最適化するためにかなりの時間を費やし、データ読み込みの各プロセスを 1 秒未満に短縮しました。プロセスの 1 つがより長く実行される原因は 2 つあります。そのうちの 1 つは SpeechSynth を使用して警告を発していて、コードのブロックごとに最大 60 秒かかる場合があります。もう 1 つは電子メールです。これは、タイムアウトが発生した場合にアプリケーションがハングしないように非同期プロセスに入れました。ただし、これら 2 つの項目が処理されていない場合でも、アプリケーションはハングします。
カスケード イベント。これは、他のイベントによってトリガーされるイベントでしょうか? その場合、アプリケーションはこのタイプのアクションを利用しません。ただし、アプリケーションは、少なくとも 1 つのバックグラウンド ワーカーから約 15 の個別のモジュールを呼び出します。これが高すぎるとは思いませんが、そうである場合はお知らせください。これが懸念される場合は、疑似コードを投稿できます。
Application.Sleep() は使用しませんが、Application.DoEvents() は一定時間経過するのを待つ場合です。
IEDim startTime As Date = Now Dim timePassed As TimeSpan = Now - startTime Do Until timePassed.TotalSeconds > 5 timePassed = Now - startTime Application.DoEvents() Loop
あいまいさの主な理由は、アプリケーション内のアイテムの種類に基づいて、この問題が TeamViewer または Radmin で知られていることを望んでいたことです。IE SQL のバージョン、COM ポート、BW。
よろしくお願いします。