finsight / QUIKSharp

QUIK# (QUIK Sharp) is the QUIK Lua interface ported to .NET.
Other
230 stars 134 forks source link

Утечка памяти в обращениях к соединению, пересозданию объекта Quik #309

Closed chislovMax closed 2 years ago

chislovMax commented 2 years ago

Добрый день! Первым делом - спасибо вас за библиотеку! Пока ещё разбираемся с её использованием, видимо что-то не так делаем, так как приходится следить за процессом квика и перезапускать его по надобности, так же идёт пересоздание объекта Quik со всеми вытекающими вызовами подписок, старта и прочего.

Но слабенький VPS начал вылетать при запуске такого робота на нём, начали копать и увидели, что рост памяти при нашем подходе постоянен, но плавный. Исследования привели к тому, что создается ооооочень много CancellationTokenSource и не зависают в памяти.

Ещё плюсом к тому есть плавающий баг, при отсоединении от подключения квика (v8.13.1.16) на биржу, если в этот момент код производит подключение (или переподключение), точный момент пока не могу назвать, то какой-то из обработчиков уходит в бесконечный цикл с использованием CancellationTokenSource и память улетает со скоростью 1-5 Мб/с. Пруфы в скринах.

image

image

image

image

Увидел, что в коде почти нигде не диспозятся cts, создаваемые повсеместно для реализации таймаутов ожидания ответа.

Готов помочь в избавлении от утечек.

Pr0phet1c commented 2 years ago

Помощь приветствуется. Лучше в виде Pull Request...

chislovMax commented 2 years ago

Нашёл, победил утечку, скину ПР в ближайшее время