![]() |
|
||||||||||
|
|||||
|
Если в модуле есть вектор сложного типа, например 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, время: 06:42. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| memory leak , Vector |
|
|