Войти
ПрограммированиеФорумОбщее

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

#0
23:08, 16 апр. 2018

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

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


#1
6:53, 17 апр. 2018

Сериализовать BinaryFormatterом, и посмотреть размер массива.

#2
8:10, 17 апр. 2018

Marshal.SizeOf

public class MyClass {

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

}
#3
11:31, 17 апр. 2018

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

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

#4
12:02, 17 апр. 2018

monobogdan
Не компилируется: https://i.imgur.com/KBmJp38.png
Хотя выглядело так просто и красиво...

#5
16:15, 17 апр. 2018

Кинжал
this.GetType()

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

#6
5:25, 19 апр. 2018

Кинжал
Есть некоторые накладные расходы, но в целом это лучший способ что я знаю.
Так же не уверен что Marshal с объектами из управляемого кода хорошо дружит.

#7
22:00, 23 апр. 2018

Skyblade
monobogdan
Спасибо за помощь, но вот только не очень понимаю к чему тут Marshal? Ибо я только с управляемым кодом работаю, поэтому Marshal мне тут не поможет :-\ За исключением unsafe'а, но unsafe только ради этой фичи тоже всюду не пихнёшь..
И видимо остаётся только сериализация...

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

Тема в архиве.