|
|
|||||
Выгрузка swf с Vector.<T>
Если в модуле есть вектор сложного типа, например Vector.<Sprite>, то имеем утечку памяти.
С простым вектором всё впорядке. (для чистоты эксперимента модуль компилить в релизном режиме) Mac, AIR3. Можете проверить под Windows? https://gist.github.com/5a277685cfcbed6e8ccb Последний раз редактировалось fljot; 15.12.2011 в 23:23. |
|
|||||
Modus ponens
|
Долго думал, как бы такое протестировать, но ничего не придумал - а как именно виден результат?
Ниже мои логи из дебаггера: r /home/wvxvw/Projects/as3-tests/bin/Shell.swf Adobe fdb (Flash Player Debugger) [build 14159] Copyright (c) 2004-2007 Adobe, Inc. All rights reserved. (fdb) Attempting to launch and connect to Player using URL /home/wvxvw/Projects/as3-tests/bin/Shell.swf Player connected; session starting. Set breakpoints and then type 'continue' to resume the session. [SWF] home/wvxvw/Projects/as3-tests/bin/Shell.swf - 38,963 bytes after decompression (fdb) b Shell.as:40 Breakpoint 1: file Shell.as, line 40 (fdb) b Shell.as:27 Breakpoint 2: file Shell.as, line 27 (fdb) c Breakpoint 2, load() at Shell.as:27 27 if (loader) (fdb) n 30 loader = new Loader(); (fdb) n 31 addChild(loader); (fdb) n 32 var context:LoaderContext = new LoaderContext(); (fdb) n 33 context.applicationDomain = new ApplicationDomain(); (fdb) n 34 loader.load(new URLRequest("Module.swf"), context); (fdb) n 35 } (fdb) n [SWF] home/wvxvw/Projects/as3-tests/bin/Module.swf - 1,419 bytes after decompression Execution halted, onMouseOut() at PushButton.as:173 173 // code goes here (fdb) n 175 // code goes here (fdb) c Additional ActionScript code has been loaded from a SWF or a frame. To see all currently loaded files, type 'info files'. Set additional breakpoints as desired, and then type 'continue'. (fdb) info files --- FontAsset.as#6 IFlexAsset.as#5 mx_internal.as#8 --- Component.as#2 Label.as#7 Module.as#10 PushButton.as#3 Shell.as#1 Style.as#4 (fdb) info swfs Shell.swf - 38,963 bytes after decompression, 8 scripts [#1 - #8]+ remaining source is still being loaded, url is fi le:///home/wvxvw/Projects/as3-tests/bin/Shell.swf Module.swf - 1,419 bytes after decompression, 1 scripts [#10 - #10]+ remaining source is still being loaded, url is file:///home/wvxvw/Projects/as3-tests/bin/Module.swf (fdb) c Breakpoint 1, unload() at Shell.as:40 40 if (!loader) return; (fdb) n 42 removeChild(loader); (fdb) n 43 loader.unloadAndStop(true); (fdb) n 44 loader = null; (fdb) n 45 } (fdb) n [UnloadSWF] home/wvxvw/Projects/as3-tests/bin/Module.swf Execution halted, onMouseOut() at PushButton.as:173 173 // code goes here (fdb) n 175 // code goes here (fdb) c Breakpoint 1, unload() at Shell.as:40 40 if (!loader) return; (fdb) info files --- FontAsset.as#6 IFlexAsset.as#5 mx_internal.as#8 --- Component.as#2 Label.as#7 Module.as#10 PushButton.as#3 Shell.as#1 Style.as#4 (fdb) info swfs Shell.swf - 38,963 bytes after decompression, 8 scripts [#1 - #8]+ remaining source is still being loaded, url is fi le:///home/wvxvw/Projects/as3-tests/bin/Shell.swf (fdb) c q Do you want to attempt to halt execution? (y or n) y Attempting to halt. To help out, try nudging the Player (e.g. press a button) Execution halted in 'Module.swf' at 0x00009890 (39056) (fdb) q The program is running. Exit anyway? (y or n) y Process terminal finished
__________________
Hell is the possibility of sanity |
|
|||||
Олег, вот я сделал ещё версию для лёгкого теста https://dl.************/s/i1yqq9e9spp...duleLoader.swf
код: https://gist.github.com/5a277685cfcbed6e8ccb (добавил) Память нифига не чистится — вот как видно. Подгружаемый модуль — он же ужас какой элементарный. Человек тут говорит вот FP 10.3 Win — всё впорядке. А на 11ом и AIRе, похоже, того. |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
А если так? Изменится ли что-нибудь?
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Неа.
Я дома под виндами попробовал — 11.1 тоже глючит. И на андроиде тоже. А 10.3 вроде нормально. Народ, есть кто на десктопном линуксе? ... заполнил баг https://bugbase.adobe.com/index.cfm?...bug&id=3071138 |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Modus ponens
|
Я могу предположить как может получаться утечка памяти - определение вектора создается по факту использования, за исключением векторов для примитивных типов, для которых существуют специальные отдельные классы. И это определение потом мешает выгрузить всю флешку.
Но я не вижу каким образом тест это проверяет :S Нужен какой-нибудь ожидаемый и какой-нибудь действительный результат. Например, если бы в загружаемой флешке было два кадра и на одном из них был бы trace(), если после выгрузки трейсы не пропали бы - можно было бы утверждать, что выгрузить не получилось. Еще я не уверен, что будет если попробовать getDefinitionByName("__as3__.vec.Vector.<Sprite>") или как там записывается имена векторов.
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 20:41. |
|
« Предыдущая тема | Следующая тема » |
Теги |
memory leak , Vector |
|
|