powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / А теперь взрослый вопрос. Утечка памяти в ремотинге
11 сообщений из 11, страница 1 из 1
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331214
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

вот такая недетская задачка.

создаю форму, вызываю ремотинговый объект, вызываю метод ейный и получаю в ответ датасет. закрываю форму, проверяю кучу: GC.GetTotalMemory(true). с каждым вызовом куча растет и не уменьшается. память в процессе который содержит ремотинговый объект вроде в порядке.

что тут может быть? никаких объектов ссылающихся на ремотинговый объект или датасет я не нашел....
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331259
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это от формы что то остается ? Делаешь Dispose после закрытия формы ?
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331290
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О Кузя :) с тобой мы это точно решим... вот рез-ты последних исследований.

если не делать байндинг то форма выгружается нормально (или почти нормально - разница где то 1К все же есть).

если делать байндинг:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ICorpSearch mySearch = (ICorpSearch) RemotingHelper.GetObject(typeof(ICorpSearch));
salesDS = mySearch.GetById(id);
SalesRow = salesDS.CorpSales.Rows[ 0 ];
MakeBindings();
...
this.txtCode.DataBindings.Add ( "Text" , SalesRow,  "corpCode" );
this.txtAccountName.DataBindings.Add ( "Text" , SalesRow,  "accountName" );
...

то идет утечка. я в шоке так как ты наверное уже понял что я в этих байндинговых классах не волоку ни черта (я раньше только вебформы если честно делал)

п.с. байндинг я для теста делаю только к текстбоксам (правда они инфраджистик). щас попробую к стандартным прибайнидить. и убрать ТабсКонтрол...
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331381
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй все-таки, чтобы вызывался Dispose -> он гарантированно должен убить всё внутри формы вместе со всеми bindig'ами
Код: plaintext
1.
2.
3.
DialogResult dr;
using(Form3 frm=new Form3())
{ dr=frm.ShowDialog();
}
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331389
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело вобщем не в ремотинге и не в байндинге.

переделал:
Код: plaintext
1.
2.
3.
4.
5.
salesDS = new CorpObject();
ICorpSearch mySearch = (ICorpSearch) RemotingHelper.GetObject(typeof(ICorpSearch));
salesDS = mySearch.GetById(id);
...
this.txtCode.DataBindings.Add ( "Text" , salesDS.CorpSales,  "corpCode" );
this.txtAccountName.DataBindings.Add ( "Text" , salesDS.CorpSales,  "accountName" );


теряется 100К при первом запуске. но потом не растет куча. так что почти победа.
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331401
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел самую суть проблемы но объяснить не могу совсем.

у меня было
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SalesRow = salesDS.CorpSales.Rows[ 0 ];
this.txtCode.DataBindings.Add( "Text" , SalesRow,  "corpCode" );
 где 

private DataRow SalesRow;

====================================
теперь

SalesRow = (Sterling.Mover.Interface.CorpObject.CorpSalesRow)salesDS.CorpSales.Rows[ 0 ];
this.txtCode.DataBindings.Add( "Text" , SalesRow,  "corpCode" );
			this.txtAccountName.DataBindings.Add

где 

private CorpObject.CorpSalesRow SalesRow;


и утечки нет.
странно как то. CorpObject - типизированный датасет и CorpSalesRow - обычная DataRow и сама SalesRow не создавалась а присваивалась ссылка и SalesRow уничтожаться должна была после закрытия формы... странно.. надо бы разобраться ибо на такие грабли можно всегда нарываться если не понимать суть происходящего.

я же пока не понимаю в чем проблема.
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331439
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чушь. последнее не читать. глюкнул я что то..

все таки проблема в байндинге где то..

если сделать :

Код: plaintext
1.
SalesRow = (Sterling.Mover.Interface.CorpObject.CorpSalesRow)salesDS.CorpSales.Rows[ 0 ];
this.txtCode.DataBindings.Add( "Text" , salesDS.CorpSales,  "corpCode" );


т.е. row присваиваится но не используется. то утечки нет.
если сделать хоть один байндинг от row. например

Код: plaintext
this.txtCode.DataBindings.Add( "Text" , SalesRow,  "corpCode" );


то происходит утечка. т.е. какой то объект вне формы остается удерживать именно ссылку на данные на которые ссылался SalesRow внутри формы. т.к. даже SalesRow = null ничего не меняет.
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331443
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати Кузя - а диспоз чего можно делать после закрытия формы? может я чего то с этой мэнэджед сборкой мусора не понимаю? если форма закрылась там диспоз уже сделан и приватные переменные должны быть сами уничтожены. или что?
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331505
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему раз GC запускается при определенных условиях (памяти стало мало
или чего еще там, не помню), то вы не можете гарантировать, что сборка
мусора происходит сразу после закрытия формы. Также этого не гарантирует
вызов Dispose (IMHO).

Так что, вполне вероятно, у вас просто хватает памяти, поэтому ее и не
освобождает GC.

Попробуйте явно вызвать сборку мусора, а потом уже мерить
GC.GetTotalMemory(true)

ЗЫ: все вышенаписанное может быть полным бредом, но все-же попробуйте :))
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331597
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разница в твоих вариантах:

в первом случае bindig управляется через CurrencyManager, а во втором - через PropertyManager. оба являются наследниками от одного и того же BindingManagerBase.

в первом случае типизация не не используется и работа идет через базовый класс DataTable. во втором - через типизированный DataRow.

но почему такое разное поведение ???
попробуй принудительно убить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
protected override void Dispose( bool disposing )
{ if( disposing )
  { if (components != null) 
    { components.Dispose();
    }
  }
  this.txtCode.DataBindings.Clear(); // вот здесь 
  base.Dispose( disposing );
}
...
Рейтинг: 0 / 0
А теперь взрослый вопрос. Утечка памяти в ремотинге
    #32331862
Полуэкт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кузя! ты гений :)

так я с тобой выучу всю библиотеку классов.

работает таки :)

правда у меня там контролов до хрена ( в это форме только ок 60 а в других и больще ста будет). там нет возможности как то всю фигню разом очистить? и интересно почему оно само не диспозится? это где то описано? это глюк или я неправильно понимаю эту балалайку?

супер спасибо :)

кстати - а че ты на письмо не ответил?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / А теперь взрослый вопрос. Утечка памяти в ремотинге
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]