Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1726
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
sizeof() эквивалент для ссылочных типов?
Я ищу способ получить размер экземпляра ссылочного типа. sizeof предназначен только для типов значений. Разве это возможно?
Если вы не возражаете, что он немного менее точен, чем идеальный, и для сравнительных целей вы можете сериализовать объект / Ы и измерить его (например, в байтах)
EDIT (я продолжал думать после публикации): потому что это немного сложнее, чем sizeof для valuetypes, например: ссылочные типы могут иметь ссылки на другие объекты и так далее... насколько мне известно, нет точного и легкого способа сделать это...
Недавно у меня был похожий вопрос, и я хотел узнать размер объекта и LinkedListNode в C#., чтобы решить эту проблему, я разработал программу , которая будет:
- Измерьте значение программы "Working Set"
- Выделите много объектов.
- Измерьте "Working Set" еще раз.
- Разделите разницу на количество выделенных объектов.
На моем компьютере (64-разрядном) я получил следующие данные:
Measuring Object:
iter working set size estimate
-1 11190272
1000000 85995520 74.805248
2000000 159186944 73.998336
3000000 231473152 73.4276266666667
4000000 306401280 73.802752
5000000 379092992 73.580544
6000000 451387392 73.3661866666667
7000000 524378112 73.3125485714286
8000000 600096768 73.613312
9000000 676405248 73.9127751111111
Average size: 73.7577032239859
Measuring LinkedListNode<Object>:
iter working set size estimate
-1 34168832
1000000 147959808 113.790976
2000000 268963840 117.397504
3000000 387796992 117.876053333333
4000000 507973632 118.4512
5000000 628379648 118.8421632
6000000 748834816 119.110997333333
7000000 869265408 119.299510857143
8000000 993509376 119.917568
9000000 1114038272 119.985493333333
Average size: 118.296829561905
Estimated Object size: 29.218576886067
Estimated LinkedListNode<reference type> size: 44.5391263379189
Исходя из полученных данных, средний размер выделения миллионов объектов составляет примерно 29.2 байт. Объект LinkedListNode составляет приблизительно 44.5 байт. Эти данные иллюстрируют две вещи:
- Очень маловероятно, что система выделяет частичный байт. Дробная мера байтов указывает на накладные расходы, необходимые CLR для выделения и отслеживания миллионов ссылочных типов.
- Если мы просто округлим количество байтов, то все равно вряд ли получим правильное количество байтов для ссылочных типов. Это ясно из меры предметов. Если мы округлим вниз, то предположим, что размер составляет 29 байт, что, хотя теоретически возможно, маловероятно из-за заполнения. Для того, чтобы улучшить производительность, выделение объекта, как правило, дополняется для целей выравнивания. Я бы предположил, что объекты CLR будут выровнены по 4 байтам.
Предполагая накладные расходы CLR и 4-байтовое выравнивание, я бы оценил объект в C# в 28 байт, а LinkedListNode в 44 байта.
Кстати, Джон Скит имел идею для метода выше, прежде чем я это сделал, и изложил ее в этом ответе на аналогичный вопрос.