Флэш Потрошитель предлагает забавный способ для определения размера объекта - сериализовать его в 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 :-)