CLR Profiling API

170
11 мая 2018, 09:17

Все привет. Волей случая пришлось разрабатывать собственный профилировщик для CLR и наткнулся на несколько не понятных моментов:

  1. Как я понимаю событие ICorProfilerCallback2::HandleCreated вызывается в том случае, если для некоторого объекта с initialObjectId создается дескриптор сборки мусора handleId, а событие ICorProfilerCallback2::HandleDestroyed - вызывается для дескриптора сборки мусора в том случае, если он был обработан, то есть связанный с ним объект был удален из памяти. Однако, в процессе профилирования я заметил, что не для всех дескрипторов созданных вызовом HandleCreated вызывается HandleDestroyed. Что может быть причиной и как это следует интерпретировать?
  2. При обработке событий ICorProfilerCallback::MovedReferences заметил следующее: предположим у нас есть два дапазон адресов A...B и C...D. В процессе обработки объекты из диапазона C...D переехали в E...F, а то что находилось в A...B было уничтожено. Однако, при следующей сборке мусора GC начинает активно перемещать блоки памяти в диапазоне A...B, хотя они уже были очищены ранее и созданий объектов в этом диапазоне адресов зафиксировано не было. Это какая то особенность работы GC или я что то не учитываю? Если что то не учитываю, то что? в какую сторону смотреть?
  3. И как вишенка на тортике: объекты соответствующие диапазону адресов A...B, которые так мужественно пытается переместить GC нашлись в списке объектов, для которых был создан, но не выполнен дескриптор сборки мусора.

Все эти 3 пункта не дают спокойно жить уже третий день. Кто сталкивался с подобным помогите плизз)

READ ALSO
Темп выполнения операций

Темп выполнения операций

Имеется очередь каких-то атомарных операций, в моем случае это порции данных, которые загружаются в БД, также это может быть, например, очередь...

156
mvvm обновление живого списка в View

mvvm обновление живого списка в View

Внутри модели есть живой список устройств, у каждого устройства есть свои поляКак оповещать список в VM, чтоб тот обновил View?

128
Как сверстать таблицу с разной шириной ячеек?

Как сверстать таблицу с разной шириной ячеек?

мне надо сверстать такую таблицу: Проблема в том, что я не знаю как сделать чтобы последний ряд зависил от предыдующего: чтобы к двойке принадлежали...

203
Что за рамка? Как его удалить с CSS? [требует правки]

Что за рамка? Как его удалить с CSS? [требует правки]

Что за рамка и как его удалить (или заменить именной цвет на другое посредством JS), при указании свойства width: 100% для изображения появляется...

173