Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [.Net Core, C#] Как можно узнать размер объекта?

[.Net Core, C#] Как можно узнать размер объекта?

КинжалПользовательwww16 апр. 201823:08#0
Приветствую
У CryEngine есть удобная фишка - он при профилировании, например командой MemStats 2000, может показать сколько памяти занимают модули и основные под-системы, например - https://i.imgur.com/raaZ5KO.jpg
Вопрос, как можно подобное реализовать на шарпе для непосредственно шарповых классов (а не допустим тех что "проносишь" из C через Marshal) ?

P.S. Да, всякие утилиты типа dotMemory никто не отменял, но это не удобно. В игре - гораздо сподручнее наблюдать подобную информацию в режиме real-time не отвлекаясь особо от блуждания по игровому миру например.

Правка: 16 апр. 2018 23:10

cherepetsПостоялецwww17 апр. 20186:53#1
Сериализовать BinaryFormatterом, и посмотреть размер массива.
monobogdanПостоялецwww17 апр. 20188:10#2
Marshal.SizeOf
public class MyClass {

  public int GetSize() {
    return Marshal.SizeOf(typeof(this));
  }

}

Правка: 17 апр. 2018 8:10

КинжалПользовательwww17 апр. 201811:31#3
cherepets
А без сериализации никак? Допустим класс игровой консоли нет смысла сериализовывать, как и многие другие :)
А у сериализации есть какие-либо накладные расходы? Или в принципе можно сериализовать любой маломальски значимый класс просто так?

monobogdan
Спасибо, гляну

Правка: 17 апр. 2018 11:33

КинжалПользовательwww17 апр. 201812:02#4
monobogdan
Не компилируется: https://i.imgur.com/KBmJp38.png
Хотя выглядело так просто и красиво...

Правка: 17 апр. 2018 12:02

SkybladeУчастникwww17 апр. 201816:15#5
Кинжал
this.GetType()

this можно опустить

Правка: 17 апр. 2018 16:17

cherepetsПостоялецwww19 апр. 20185:25#6
Кинжал
Есть некоторые накладные расходы, но в целом это лучший способ что я знаю.
Так же не уверен что Marshal с объектами из управляемого кода хорошо дружит.
КинжалПользовательwww23 апр. 201822:00#7
Skyblade
monobogdan
Спасибо за помощь, но вот только не очень понимаю к чему тут Marshal? Ибо я только с управляемым кодом работаю, поэтому Marshal мне тут не поможет :-\ За исключением unsafe'а, но unsafe только ради этой фичи тоже всюду не пихнёшь..
И видимо остаётся только сериализация...

Правка: 23 апр. 2018 22:14

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр