Просто включаю и выключаю коннектор к Квику. И с каждым перезапуском он все тяжелее загружает данные, а потом на 4-5 включении выбрасывает с ошибкой о переполнении памяти. С каждым включением он съедает 400 Мб оперативной памяти, а после отключения её не выгружает. Только когда закрываешь окно коннектора он освобождает память. Код отключения у меня как из уроков:
public void DisConnectSafe()
{
//Если коннектор к торговой платформе не пуст и соединение установлено
if(Trader!=null && Trader.IsConnected)
{
Trader.StopExport();
Trader.Disconnect();
}
}
Dispose() не помогает!!!
Comentários (5)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
public void DisConnectSafe() { //Если коннектор к торговой платформе не пуст и соединение установлено if(Trader!=null && Trader.IsConnected) { Trader.StopExport(); Trader.Disconnect();
public void DisConnectSafe() { //Если коннектор к торговой платформе не пуст и соединение установлено if(Trader!=null && Trader.IsConnected) { Trader.StopExport(); Trader.Disconnect();
Эффекта 0! При пошаговой проверке оказалось, что после Trader.Disconnect(), Trader.Dispose(), GC.Collect() память уменьшается на 10-20Мбайт не более, а вся прога жрет под 300Мбайт. А при Trader=null; при повторном запуске при нажатии на кнопку вылетает по Эксепшену. И правильно на мой взгляд делает. Вообще эту строку закомментил. Может не освобождает потому, что Trader где-то ещё используется? Я к сожалению в тонкостях не разбираюсь...
Почему память может не высвобождаться? Или такая ерунда только у меня?
Пришлите проект на почту iv_qul@list.ru будем разбираться.
Просмотрел я проект, выяснил, что проблема увеличения занятой памяти связана с увеличивающимся кол-вом вызовов метода Trader.StartExport(); при каждом нажати на кнопку для подключения к терминалу. Это связано с тем, что перед каждым подключением к терминалу выполняется следующее:
но при этом нигде не вызывается Trader.Connected -= ... Т.о. событие Trader.Connected имеет все большее и большее кол-во экземпляров одного и того же обработчика, из-за чего и вызывается несколько раз метод Trader.StartExport(); при появлении одного события Trader.Connected. Выход: инициализировать объект Trader в отдельном методе (где есть код Trader.Connected += ...), только один раз, а не при каждом нажатии на кнопку подключения, либо при отключении от терминала выполнять код: Trader.Connected -= ...