Подвисает OnProcess
Atom Ответить
08.08.2012


Den

Фотография
Уважаемые разработчики!

Quik 6.02, 6.3

В S# 4.1.2, 4.1.3(rev 18591) стабильно подвисает OnProcess если делаю вызовы в GUI.

Схема такая:

1. TimeFrameStrategy c интервалом 50ms.
2. В OnProcess делаются расчеты и результат показывается в GUI через вызов
в MainWindow.Instance.GuiAsync где делается апдейт а-ля TextField = value.

При прохождении от 1000 до 10000 циклов все подвисает.
Если вызовы в GUI закомментировать стратегия не виснет.

Еще она зависает периодически после вызовов addLog...

В 3.x, 4.0, 4.1 стратегии пахали весь тороговый день с 10.00 до 23.50 без проблем.

С чем это может быть связано, что можете посоветовать?

Теги:


Спасибо:




16 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 08.08.2012
Ответить


Den Перейти
С чем это может быть связано, что можете посоветовать?


Поизучать стек трейсы на предмет дедлоков.
Спасибо:

ra81

Фотография
Дата: 08.08.2012
Ответить


Да подобная беда была у меня как-то раз именно из за дедлоков. Лочилось окошко лога и дальше весь поток тоже лочился.
Спасибо:

Den

Фотография
Дата: 08.08.2012
Ответить


Mikhail Sukhov Перейти
Den Перейти
С чем это может быть связано, что можете посоветовать?


Поизучать стек трейсы на предмет дедлоков.


А нету трейсов в моем роботе. Все треды от S#, в них стэк не кажется...

У меня код не менялся...
А что вы поменяли в тредах начиная с 4.1.2?
Автор топика
Спасибо:

Den

Фотография
Дата: 08.08.2012
Ответить


ra81 Перейти
Да подобная беда была у меня как-то раз именно из за дедлоков. Лочилось окошко лога и дальше весь поток тоже лочился.


на чем оно лочилось, как избавились?
Автор топика
Спасибо:

ra81

Фотография
Дата: 09.08.2012
Ответить


Den Перейти
ra81 Перейти
Да подобная беда была у меня как-то раз именно из за дедлоков. Лочилось окошко лога и дальше весь поток тоже лочился.


на чем оно лочилось, как избавились?


Ну там длинная замута была достаточно. Чисто в коде моего коннектора.
https://stocksharp.ru/fo...a-v-mietodie-AddInfoLog/
Спасибо:

Den

Фотография
Дата: 09.08.2012
Ответить


Den Перейти
Mikhail Sukhov Перейти
Den Перейти
С чем это может быть связано, что можете посоветовать?


Поизучать стек трейсы на предмет дедлоков.


А нету трейсов в моем роботе. Все треды от S#, в них стэк не кажется...

У меня код не менялся...
А что вы поменяли в тредах начиная с 4.1.2?


Лочится еще при вызове логгинга из TimeFrameStrategy.Process в ConsoleLogListener.
В моем коде нет никаких Wait'ов, Sleep'ов и т.д. У меня не начем лочиться.
Похоже это нутро S# лочится...

Вот картинка с тредами, но стек трейса ни у одного не достать:



Как дебажить дальше?

P.S. может быть имеет смысл давать имя тредам по имени стратегий, кот. они вызывают?
Понял, что на каждый вызов OnProcess из пула берется новый тред.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 10.08.2012
Ответить


В итоге разобрались или нет?
Если нет - попробуйте пустой OnProcess только с работой с gui.
Спасибо:

Den

Фотография
Дата: 13.08.2012
Ответить


Alexander Mukhanchikov Перейти
В итоге разобрались или нет?
Если нет - попробуйте пустой OnProcess только с работой с gui.


Не разобрался. Если в трейсах нет моего кода как мне разобраться?

Пока, действительно, остается минизировать кейс.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 13.08.2012
Ответить


Den Перейти
Если в трейсах нет моего кода как мне разобраться?


В трейсах всегда должен быть код. В т.ч. и ваш. Думаю не там смотрите.
Спасибо:

Den

Фотография
Дата: 13.08.2012
Ответить


Mikhail Sukhov Перейти
Den Перейти
Если в трейсах нет моего кода как мне разобраться?


В трейсах всегда должен быть код. В т.ч. и ваш. Думаю не там смотрите.


Я смотрю закладку Threads. А потом для всех тредов смотрю Call Stack. Ничего нет.
Если в OnProcess поставлю Sleep и нажму на паузу - тогда в стеке есть мой код.

Буду благодарен, если расскажете что я делаю не так и как правильно.
Я вообще java developer, а C# по аналогии юзаю :)
Автор топика
Спасибо:

ra81

Фотография
Дата: 14.08.2012
Ответить


Den Перейти
Mikhail Sukhov Перейти
Den Перейти
Если в трейсах нет моего кода как мне разобраться?


В трейсах всегда должен быть код. В т.ч. и ваш. Думаю не там смотрите.


Я смотрю закладку Threads. А потом для всех тредов смотрю Call Stack. Ничего нет.
Если в OnProcess поставлю Sleep и нажму на паузу - тогда в стеке есть мой код.

Буду благодарен, если расскажете что я делаю не так и как правильно.
Я вообще java developer, а C# по аналогии юзаю :)


На вкладке с тредами, где написан статус треда, тыкнуть на стрелочку вниз и развернется последовательность вызовов. То есть что было вызвано до текущего лока. Вот собственно если посмотреть эти последовательности, можно определить где собственно затык случился.

ПС: судя по тому что вижу, каждый стакан по инструменту прет в отдельном треде, это интересно.
Спасибо:

Den

Фотография
Дата: 14.08.2012
Ответить


ra81 Перейти
Den Перейти
Mikhail Sukhov Перейти
Den Перейти
Если в трейсах нет моего кода как мне разобраться?


В трейсах всегда должен быть код. В т.ч. и ваш. Думаю не там смотрите.


Я смотрю закладку Threads. А потом для всех тредов смотрю Call Stack. Ничего нет.
Если в OnProcess поставлю Sleep и нажму на паузу - тогда в стеке есть мой код.

Буду благодарен, если расскажете что я делаю не так и как правильно.
Я вообще java developer, а C# по аналогии юзаю :)


На вкладке с тредами, где написан статус треда, тыкнуть на стрелочку вниз и развернется последовательность вызовов. То есть что было вызвано до текущего лока. Вот собственно если посмотреть эти последовательности, можно определить где собственно затык случился.


Ну именно так я и делал.
[External Code] было мне ответом...)
Автор топика
Спасибо:

ra81

Фотография
Дата: 15.08.2012
Ответить


Den


Ну именно так я и делал.
[External Code] было мне ответом...)


Экспресс версия студии чтоли? Тока в ней все порезано почикано, что ничего не сделать толком.
Спасибо:

Den

Фотография
Дата: 15.08.2012
Ответить


ra81 Перейти
Den


Ну именно так я и делал.
[External Code] было мне ответом...)


Экспресс версия студии чтоли? Тока в ней все порезано почикано, что ничего не сделать толком.


Нормальная студия. Когда я ставлю брейк или Sleep в своем коде, то показывыется стек
с вызовами в моем коде на одном из тредов. На всех остальных [External Code].

Когда все подвисает как я описал в самом начале, на всех тредах наблюдаю [External Code].
Автор топика
Спасибо:

ra81

Фотография
Дата: 16.08.2012
Ответить


Den Перейти
ra81 Перейти
Den


Ну именно так я и делал.
[External Code] было мне ответом...)


Экспресс версия студии чтоли? Тока в ней все порезано почикано, что ничего не сделать толком.


Нормальная студия. Когда я ставлю брейк или Sleep в своем коде, то показывыется стек
с вызовами в моем коде на одном из тредов. На всех остальных [External Code].

Когда все подвисает как я описал в самом начале, на всех тредах наблюдаю [External Code].


Вообще даже если код не собственный стек показывается. Включая стокшарп вызовы. Тока так крякозябры. Режим дебаг? Я даж не знаю что предположить :)
Спасибо: Den

Den

Фотография
Дата: 16.08.2012
Ответить


ra81 Перейти
Den Перейти
ra81 Перейти
Den


Ну именно так я и делал.
[External Code] было мне ответом...)


Экспресс версия студии чтоли? Тока в ней все порезано почикано, что ничего не сделать толком.


Нормальная студия. Когда я ставлю брейк или Sleep в своем коде, то показывыется стек
с вызовами в моем коде на одном из тредов. На всех остальных [External Code].

Когда все подвисает как я описал в самом начале, на всех тредах наблюдаю [External Code].


Вообще даже если код не собственный стек показывается. Включая стокшарп вызовы. Тока так крякозябры. Режим дебаг? Я даж не знаю что предположить :)


А вот это была очень полезная информация. Я просто об этом не знал :)
Спасибо!

Сразу нарыл решение на stackoverflow:

Go into Tools | Options | Debugging | General, and uncheck the "Enable Just My Code" checkbox. Now Visual Studio will show the full call stack (at least for managed code, you still may see some "native to managed transitions" in there).
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy