Занимаемая объектом память: ActionScript 3

· На чтение уйдёт 1 минута · (170 слов)

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

Полезное