Показать сообщение отдельно
Старый 08.12.2008, 15:03
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 9  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Вообще работа мифического GC покрыта туманом. Вот простенький тест:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.system.System;
	import flash.utils.Timer;
	import ru.inils.utils.Debugger;
 
	public class Main extends Sprite 
	{
		private var arr:Array = new Array();
		private var timer:Timer;
		private var s:Sprite;
 
		public function Main():void 
		{
			Debugger.trace(System.totalMemory / 1048576);
			for (var i:uint = 0; i < 700000; i ++) {
				s = new Sprite();
				arr.push(s);
			}
 
			Debugger.trace(System.totalMemory / 1048576);
			for (var j:Number = 0; j < arr.length; j ++ ) {
				arr[j] = null;
			}
 
			Debugger.trace(System.totalMemory / 1048576);
 
			timer = new Timer(5000);
			timer.addEventListener(TimerEvent.TIMER, test);
			timer.start();
		}
 
		private function test(e:TimerEvent):void {
			Debugger.trace(System.totalMemory / 1048576);
			//System.gc();
		}
	}
}
Если раскомментить последнюю строку - то все ок - память очищается. Если же нет (как и есть в релизном плеере), то фиг память очищается - у меня заняло 356 МБ и продолжает расти потихоньку (тоже непонятно почему). Вот уже 10 мин плеер работает - память не очищается...

Добавлено через 27 минут
Прошло 32 минуты. Память 357.4375 МБ. Не очистилась. Неужели по мнению GC 357 МБ - это незначительный объем, раз он не срабатывает?