Мошенническое 40-секундное ожидание при загрузке сборки Matlab ... как диагностировать причину? - PullRequest
3 голосов
/ 30 марта 2011

У меня очень странная проблема: я собрал некоторый код Matlab в сборку. Я создаю экземпляр класса со следующей строкой C #:

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

При первом вызове этой строки выполнение всегда занимает ровно 40 секунд. Последующие звонки происходят мгновенно. Что-то изменилось, потому что это не заняло много времени, когда я последний раз просматривал код 4 месяца назад.

Может ли эксперт порекомендовать способ, чтобы увидеть, что здесь происходит?

UPDATE:

Заметил, что UltraEdit (мой редактор) также требует ровно 40 секунд для запуска в первый раз. Я думаю, что здесь есть какая-то связь, так как это никогда не случалось.

UPDATE

Обнаружил проблему: именно мой новый NAS-накопитель NetGear Stora вызвал проблему с тайм-аутом нецензурной сети. Когда я отключил его, все стало работать как смазанная молния.

Пусть блохи тысяч верблюдов заполонят подмышки ослиного парня, ответственного за этот эпический инженерный замысел.

1 Ответ

4 голосов
/ 30 марта 2011
  1. В начале 40-секундного периода ожидания, прерывая рабочий процесс (Debug → Break All).
  2. Откройте окно Call Stack (Debug → Windows →Стек вызовов).
  3. Если вы используете сборку MatLib в качестве внешней библиотеки, а не проекта в своем решении, щелкните правой кнопкой мыши окно Стек вызовов и выберите Показать внешний код в контекстном меню.
  4. Откройте окно Потоки (Отладка → Windows → Потоки).
  5. Пролистайте потоки, выбирая их по одномуи глядя в окно Call Stack .Из нескольких верхних фреймов вы должны видеть, что делает каждый из потоков, - вы должны видеть, где в коде MatLib вызвана задержка.(Потоки в дескрипторах ожидания ожидают, пока другие потоки завершат работу, или бездействуют, ожидая, пока другие потоки создадут работу для их обработки.)

My думаю, состоит в том, что библиотекабудет пытаться сделать какой-либо сетевой вызов, и время ожидания этого вызова составляет 40 секунд.Вы должны быть в состоянии использовать информацию, которую вы узнали из описанных выше шагов, чтобы отследить проблему в библиотеке.

...