3

非常に奇妙な問題があります。Matlabコードをアセンブリにコンパイルしました。次のC#行でクラスをインスタンス化します。

MatPhiLib temp = new MatPhiLib(); // This line takes 40 seconds to execute.

この行が最初に呼び出されたとき、実行には常に正確に40秒かかります。後続の呼び出しは瞬時に行われます。4か月前に最後にコードを調べたとき、それほど長くはかからなかったため、何かが変更されました。

専門家は、ここで何が起こっているかを確認するための可視性を得る方法を推奨できますか?

アップデート:

UltraEdit(私のエディター)も最初の起動に正確に40秒かかることに気づきました。これもかつてなかったので、そこにはいくつかのリンクがあると思います。

アップデート:

問題が見つかりました:それは私の新しいNetGear Stora NASであり、わいせつなネットワークタイムアウトの問題を引き起こしていました。プラグを抜くと、すべてが油を塗った稲妻のように機能し始めました。

千頭のラクダのノミが、その壮大なエンジニアリング設計を担当するロバの頭脳の男の脇の下に蔓延する可能性があります。

4

1 に答える 1

4
  1. 40秒の待機期間の早い段階で、実行中のプロセスに侵入します([デバッグ]→[すべて中断])。
  2. [コールスタック]ウィンドウを開きます([デバッグ]→[ウィンドウ]→[コールスタック])。
  3. ソリューションでプロジェクトではなく外部ライブラリとしてMatLibアセンブリを使用している場合は、[コールスタック]ウィンドウを右クリックし、コンテキストメニューで[外部コードの表示]を選択します。
  4. [スレッド]ウィンドウを開きます([デバッグ]→[ウィンドウ]→[スレッド])。
  5. スレッドを1つずつ選択し、[コールスタック]ウィンドウを確認しながら、スレッドを進めていきます。上の数フレームから、各スレッドが何をしているかを確認できるはずです。MatLibコードのどこで遅延が発生しているかを確認できるはずです。(待機ハンドル内のスレッドは、他のスレッドが作業を完了するのを待機しているか、他のスレッドが処理する作業を作成するのを待機しています。)

私の推測では、ライブラリはある種のネットワーク呼び出しを行おうとしますが、この呼び出しのタイムアウトは40秒です。上記の手順で学習した情報を使用して、ライブラリ内の問題を追跡できるはずです。

于 2011-03-30T13:19:48.263 に答える