Флэш Потрошитель предлагает забавный способ для определения размера объекта - сериализовать его в ByteArray и посмотреть на изменение размера оного ByteArray. Как ни странно, мне ничего подобного в голову не приходило...
Несколько модифицированный пример кода (оригинал у Флэш Потрошителя):
private static var ba: ByteArray = new ByteArray(); public static function traceObjectSize(o: *): void { var old: int = ba.length; ba.writeObject(o); trace ( (ba.length - old), "bytes for", o); } public final function init(): void { var o: Object = new Object(); traceObjectSize(o); o.test = "test"; traceObjectSize(o); traceObjectSize(this); traceObjectSize("1234567890"); traceObjectSize("12345678901234567890"); }
Вывод такой:
4 bytes for [object Object] 11 bytes for [object Object] [SWF] D:\BERSERK\FLASH\battlefield\bin\Test.swf - 518 149 bytes after decompression 2658 bytes for test0 12 bytes for 1234567890 22 bytes for 12345678901234567890
Вероятно, такой метод считает лишь данные, но часто большего и не надо... Вот например строка занимает свою длину + 2 байта... Пустой объект - 4 байта... Пустой объект со свойством test, выставленным в строку test - должен вероятно занимать 4 байта + 6 байт, но занимает 11 :-)