Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
894
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Разгрузка ByteArray используя Actionscript 3
Как я могу принудительно выгрузить ByteArray из памяти с помощью ActionScript 3?
Я попробовал следующее:
// First non-working solution
byteArray.length = 0;
byteArray = new ByteArray();
// Second non-working solution
for ( var i:int=0; i < byteArray.length; i++ ) {
byteArray[i] = null;
}
Я не думаю, что тебе есть о чем беспокоиться. Если System.totalMemory идет вниз, вы можете расслабиться. Очень может быть, что OS не вернет вновь освобожденную память (в ожидании следующего раза, когда Flash игрок попросит больше памяти).
Попробуйте сделать что-то еще, что очень интенсивно потребляет память, и я уверен, что вы заметите, что память, выделенная для Flash Player, уменьшится и будет использоваться для другого процесса.
Как я понял, управление памятью в современных OS-х годах не является интуитивным с точки зрения анализа объемов, выделяемых каждому процессу, или даже общей суммы выделяемых ресурсов.
Когда я использую свой Mac в течение 5 минут 95% из моих 3 ГБ RAM используется,и он останется таким же, он никогда не падает. Именно так OS обрабатывает память.
До тех пор, пока это не нужно в другом месте, даже процессы, которые вышли, все еще имеют назначенную им память (это может сделать их запуск быстрее в следующий раз, например).
(Я не уверен в этом, но...)
AS3 использует недетерминированную сборку мусора. Это означает, что незащищенная память будет освобождаться всякий раз, когда среда выполнения чувствует это (обычно нет, если нет причины для запуска, так как это дорогостоящая операция для выполнения). Это тот же самый подход, который используется большинством современных языков сбора мусора (например, C# и Java).
Предполагая, что нет никаких других ссылок на память, на которую указывает byteArray , или на элементы внутри самого массива, память будет освобождена в какой-то момент после выхода из области, где объявлен byteArray .
Вы можете принудительную сборку мусора, хотя вы действительно не должны. Если вы делаете, это только для тестирования... если вы сделаете это на производстве, вы повредите производительности гораздо больше, чем поможете ей.
Чтобы заставить a GC, попробуйте (да, дважды):
flash.system.System.gc();
flash.system.System.gc();
Вы можете прочитать больше здесь .
Взгляните на эту статью
http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html
IANA actionscript программист, однако я чувствую, что это так, потому что сборщик мусора может не работать, когда вы этого хотите.
Следовательно http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/
Поэтому я бы рекомендовал попробовать их код коллекции и посмотреть, поможет ли это
private var gcCount:int;
private function startGCCycle():void{
gcCount = 0;
addEventListener(Event.ENTER_FRAME, doGC);
}
private function doGC(evt:Event):void{
flash.system.System.gc();
if(++gcCount > 1){
removeEventListener(Event.ENTER_FRAME, doGC);
setTimeout(lastGC, 40);
}
}
private function lastGC():void{
flash.system.System.gc();
}
К сожалению, когда речь заходит об управлении памятью в Flash/actionscript, вы мало что можете сделать. ActionScript был разработан, чтобы быть простым в использовании (поэтому они не хотели, чтобы люди беспокоились об управлении памятью)
Ниже приведен обходной путь, вместо создания переменной ByteArray попробуйте сделать это.
var byteObject:Object = new Object();
byteObject.byteArray = new ByteArray();
...
//Then when you are finished delete the variable from byteObject
delete byteObject.byteArray;
Где byteArray -динамическое свойство byteObject, вы можете освободить выделенную для него память.
Я полагаю, что вы сами ответили на свой вопрос...
System.totalMemory дает вам общий объем памяти, являющейся "used", а не выделенной. Это точно, что ваше приложение может использовать только 20 Мб, но у него есть 5 Мб, которые свободны для будущих распределений.
Я не уверен, что Adobe docs прольет свет на то, как он управляет памятью...
Итак, если я загружаю, скажем, 20 МБ из MySQL, в Диспетчере задач RAM для приложения увеличивается примерно на 25 МБ. Затем, когда я закрываю соединение и пытаюсь избавиться от ByteArray, RAM никогда не освобождается. Однако, если я использую System.totalMemory, flash player показывает, что память освобождается, а это не так.
Может ли игрок flash делать что-то вроде Java и резервировать место в куче и не выпускать его до тех пор, пока приложение не выйдет?
Итак, если я загружаю, скажем, 20 МБ из MySQL, в Диспетчере задач RAM для приложения увеличивается примерно на 25 МБ. Затем, когда я закрываю соединение и пытаюсь избавиться от ByteArray, RAM никогда не освобождается. Однако, если я использую System.totalMemory, flash player показывает, что память освобождается, а это не так.
Может ли игрок flash делать что-то вроде Java и резервировать место в куче и не выпускать его до тех пор, пока приложение не выйдет?
Ну да и нет, как вы могли бы прочитать из бесчисленных блогпостов, GC в AVM2 оптимистичен и будет работать своими собственными таинственными путями. Таким образом, он работает немного как Java и пытается зарезервировать место в куче, однако если вы позволите ему достаточно долго и начнете выполнять другие операции, которые потребляют некоторую значительную память, он освободит это предыдущее пространство. Вы можете увидеть это, используя профилировщик в течение ночи с некоторыми тестами, запущенными поверх вашего приложения.
Итак, если я загружаю скажем 20 МБ из MySQL, в Диспетчере задач RAM для приложения увеличивается примерно на 25 МБ. Затем, когда я закрываю соединение и пытаюсь избавиться от ByteArray, RAM никогда не освобождается. Однако, если я использую System.totalMemory, flash player показывает, что память освобождается, а это не так.
Итак, если я загружаю скажем 20 МБ из MySQL, в Диспетчере задач RAM для приложения увеличивается примерно на 25 МБ. Затем, когда я закрываю соединение и пытаюсь избавиться от ByteArray, RAM никогда не освобождается. Однако, если я использую System.totalMemory, flash player показывает, что память освобождается, а это не так.
Игрок-это "releasing" память. Если вы свернете окно и восстановите его, то увидите, что Мемори теперь гораздо ближе к тому, что показывает System.totalMemory.
Вы также можете быть заинтересованы в использовании инструментов профилирования FlexBuilder, которые могут показать вам, действительно ли у вас есть утечки памяти.