Тема
|
Как може да се вземе RefCount на обект в .NET?
|
|
Автор |
мopaв (непознат) |
Публикувано | 19.01.06 09:54 |
|
...
Form obj = new Form();
Form obj2 = obj;
...
Сега ако това беше COM RefCount щеше да е == 2; Има ли начин да се засече този справочен брой в .net за .net обекти?
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: мopaв]
|
|
Автор |
Lupi (Spitfire) |
Публикувано | 19.01.06 14:15 |
|
Ми май няма начин, поне аз не намерих.
Иначе може да се ползва GC.ReferenceEquals(obj, obj2), за да видиш дали двете сочат към един и същи обект.
Eeeeeeeeeeeeeeeaaaaaaasy rider
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: Lupi]
|
|
Автор |
мopaв (непознат) |
Публикувано | 19.01.06 15:13 |
|
Или object.Equals. Все някакъв начин трябва да има този събирач на боклук нали все някак засича този брой?! Или тук има някаква свръх подла магия или няма никакъв събирач:)) Ще ми се по някакъв вграден начин да засичам справки към обект в крайна сметка ще измайсторя нещо колкото да си свърша работа.
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: мopaв]
|
|
Автор | eфp. Лyk (Нерегистриран) |
Публикувано | 19.01.06 15:43 |
|
Каква е причината да се опитваш да разбереш колко са връзките към обект?
Питам защото не мога да се сетя за приложение на нещо такова. Може би за детектване на мемори лиик, ама ми се струва странно.
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: мopaв]
|
|
Автор | Barracuda (Нерегистриран) |
Публикувано | 19.01.06 15:53 |
|
Отдавна не съм се занимавал с .NET, а и на първо четене в DOC-a аз също не открих нищо.
НО, мога да дам един hint или насока за по-нататъчно търсене - ако MS са извадили някакъв публичен интерфейс за debuger-a или profiler-а, то от там би било възможно да се изрови тази информация.
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: eфp. Лyk]
|
|
Автор | мopaв (Нерегистриран) |
Публикувано | 19.01.06 16:55 |
|
Всичко тръгна от ADO.NET направих опит през DataSet да изградя малка база в паметта и след приключване на работа с диалог да вкарам всичко в СУБД. За някоко диалога това сработи , преди ShowDialog създавам DataSet изчитам схемите на всички таблици които ми трябват евентуално създавам по един запис и нагласям отношенията. За един сложен диалог тази техника за малко да ме "погуби" :). Сега се получава една сложна но логична плетеница от масиви и т.н в които си държа всичко до момента на запис.
Имам елемент който може да участва в един или в някоко монтажа , а може и в нито един. Ако изтрия елемент то трябва да съм убеден че го е разположен на монтаж. Опитах сам да реализирам AddRef , Release бледо подобие на IUnknown. Много скоро видях , че нещо куца понеже някои части код почват да "тежат". Ако мога да засичам броя справки към обект съм си решил проблема:))
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: мopaв]
|
|
Автор | gaga (Нерегистриран) |
Публикувано | 19.01.06 17:18 |
|
ЦЛР-а не пази инфо за броя на референциите (абсолютно сигурно). Можеш да преброиш референциите със рефлекшът АПИ-то обаче е голям хак. Търси за "access to private members reflection" или нещо такова. Важното е да обходиш всички променливи на обвързаните асемблита и да извикаш референцееяуалс за проверката. Много е бавно и е безмислено. От дрга страна можеш да си създадеш механизъм за броене на референции на свои собствени типове и ще работи много по бързо, и може да се направи прозрачно.
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: мopaв]
|
|
Автор |
Maтa Kocмaтa (маймун) |
Публикувано | 20.01.06 01:31 |
|
Мда - .НЕТ обектите не са ref. counted, така че нямаш шанс 
Машина за отделяне на кожа и сланина от парени свине
|
|
Тема
|
Re: Как може да се вземе RefCount на обект в .NET?
[re: мopaв]
|
|
Автор | eфp. Лyk (Нерегистриран) |
Публикувано | 20.01.06 10:23 |
|
Май разбрах. Искаш да го изтриеш от запис на една таблица само когато се референсва и от друго място.
Доста сигурен съм, че наготово това няма да го пoлучиш от .Net-a, защото самият обект не знае колко референса има към него. Всъщност никой не знае, докато не се пусне пълния garbage collector.
Май единственото решение е всяко пристояване да минава през едно място и там да правиш нещо.
|
|