Узнайте, сколько памяти используется объектом в C#?

Они очень разные, хотя они часто используются для реализации пользовательских типов данных (именно это я и предполагаю, что этот вопрос есть).

Как упоминалось в PMg, #define обрабатывается pre-processor (как операция вырезания и вставки), прежде чем компилятор увидит код, а typedef интерпретируется компилятором.

Одно из основных отличий (по крайней мере, когда дело доходит до определения типы данных) заключается в том, что typedef допускает более конкретную проверку типов. Например,

#define defType int
typedef int tdType

defType x;
tdType y;

Здесь компилятор видит переменную x как int, но переменную y как тип данных, называемую «tdType», которая имеет тот же размер, что и int. Если вы написали функцию, которая приняла параметр типа defType, вызывающий может передать нормальный int, и компилятор не узнает разницу. Если вместо этой функции вместо параметра tdType был выбран параметр, то компилятор будет гарантировать, что во время вызовов функции использовалась переменная соответствующего типа.

Кроме того, некоторые отладчики имеют возможность обрабатывать typedef s, что может быть гораздо более полезным, чем все пользовательские типы, перечисленные как их базовые примитивные типы (как это было бы, если бы #define использовался вместо этого).

13
задан Uwe Keim 14 May 2018 в 11:04
поделиться

3 ответа

Если Вы не пытаетесь сделать это в самом коде, который я принимаю на основе Вашей ссылки МУРАВЬЕВ, попытайтесь смотреть на CLRProfiler (в настоящее время v2.0). Это свободно и если Вы не возражаете против довольно упрощенного UI, это может предоставить ценную информацию. Это даст Вам всесторонний обзор всех видов статистики. Я использовал его некоторое время назад в качестве одного инструмента для нахождения стебля лука-порея памяти.

Загрузка здесь: http://www.microsoft.com/downloads/details.aspx?FamilyId=A362781C-3870-43BE-8926-862B40AA0CD0&displaylang=en

, Если Вы действительно хотите сделать это в коде, CLR имеет профильные API, которые Вы могли использовать. При нахождении информации в CLRProfiler так как это использует те API, необходимо быть в состоянии сделать это в коде также. Больше информации здесь: http://msdn.microsoft.com/de-de/magazine/cc300553 (en-us) .aspx

(Это не столь загадочно как использование WinDbg, но быть готовым сделать могущественный глубоко в CLR.)

7
ответ дан 2 December 2019 в 00:59
поделиться

Профилировщик CLR , который является, обеспечивает свободный Microsoft, делает очень хорошее задание в этом типе вещи.

введение в целого профилировщика может быть загружено здесь . Также Шаблоны & команды Методов помещают что-то вместе некоторое время назад детализация, как использовать профилировщика.

Это делает довольно разумное задание при показе Вам, различные потоки и объекты создали в тех потоках.

Hope это проливает некоторый свет. Счастливое профилирование!

3
ответ дан 2 December 2019 в 00:59
поделиться

У меня есть хороший опыт с MemProfiler. Это дает Вам отслеживания стека того, когда объект был создан и все графики того, почему объект все еще не собран "мусор".

2
ответ дан 2 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: