Число ссылок на объект
У меня же задача - вывести число ссылок на объект в текущий момент.
1) В текущей программе
2) Всего в среде CLR
Например
Код:
class CLASS
{
public CLASS() { }
}
unsafe static void Main(string[] args)
{
CLASS F = new CLASS();
Console.WriteLine(RefCount(F));
CLASS C = F;
Console.WriteLine(RefCount(F));
C = null;
Console.WriteLine(RefCount(F));
}
{
public CLASS() { }
}
unsafe static void Main(string[] args)
{
CLASS F = new CLASS();
Console.WriteLine(RefCount(F));
CLASS C = F;
Console.WriteLine(RefCount(F));
C = null;
Console.WriteLine(RefCount(F));
}
Результаты:
1
2
1
Кто нить знает как это сделать?
Цитата: sigmov
У меня же задача - вывести число ссылок на объект в текущий момент.
Кто нить знает как это сделать?
Кто нить знает как это сделать?
Написать собственный GC.
CLR не занимается поддержкой количества ссылок на объекты. Вместо этого GC периодически обходит все объекты, проходя по ссылкам (все начинается с регистров и статических полей) и помечает достижимые объекты в куче, после завершения этого процесса все непомеченные объекты считаются мусором. В этом процессе подсчет ссылок имеет место быть, но как локальная оптимизация сборки мусора.
Цитата: hardcase
Написать собственный GC.
Собственный сборщик мусора? - шутить изволите!
Тогда уж проще написать собственный Object добавив в него учет ссылок :)
Цитата: sigmov
Собственный сборщик мусора? - шутить изволите!
Тогда уж проще написать собственный Object добавив в него учет ссылок :)
Тогда уж проще написать собственный Object добавив в него учет ссылок :)
Учет ссылок - слишком накладная операция, и в общем случае не может поддерживаться при условии сохранения возможности работы с небезопасным кодом.