arrays - A descarga de uma ByteArray usando Actionscript 3 - CoreDump.pt
A descarga de uma ByteArray usando Actionscript 3
Como eu força descarregar uma ByteArraymemória de usar ActionScript 3?
Publicado 01/08/2008 em 13:30 2008-08-01 13:30
fonte usuário maclema
Eu não acho que você tem nada para se preocupar. Se System.totalMemoryvai para baixo você pode relaxar. Pode muito bem ser o SO que não recuperar a memória recém-libertado (em antecipação da próxima vez Flash Player vai pedir mais memória).
Tente fazer outra coisa que é muito intensivo de memória e tenho certeza que você vai perceber que a memória alocada para o Flash Player vai diminuir e ser usadas para o outro processo em seu lugar.
Como eu entendi, gerenciamento de memória em sistemas operacionais modernos não é intuitiva a partir da perspectiva de olhar para os montantes atribuídos a cada processo, ou até mesmo o montante total atribuído.
Quando eu usei o meu Mac por 5 minutos 95% do meu 3 GB RAM é usada, e ele vai ficar desse jeito, ele nunca vai para baixo. Isso é apenas a maneira como o sistema operacional lida com a memória.
Enquanto não é necessário em outros lugares até mesmo processos que pararam ainda tem memória atribuída a eles (isso pode torná-los lançar mais rápido da próxima vez, por exemplo).
Respondeu 14/08/2008 em 18:05 2008-08-14 18:05 share
(Eu não sou positivo sobre isso, mas ...)
AS3 usa uma coleta de lixo não-determinista. O que significa que a memória não referenciado será liberado sempre que o tempo de execução se sente como ele (normalmente não menos que haja uma razão para correr, já que é uma operação cara para executar). Esta é a mesma abordagem utilizada pela maioria dos modernos de lixo coletado linguagens (como C # e Java, bem).
Assumindo que não há outras referências à memória apontada por byteArrayou os itens dentro da própria matriz, a memória será liberada em algum momento depois de sair do escopo onde byteArrayé declarada.
Você pode forçar uma coleta de lixo, mas você realmente não deveria. Se você fizer, faça-o apenas para testes ... se você fazê-lo em produção, você vai prejudicar o desempenho muito mais do que ajudá-lo.
Para forçar um GC, tente (sim, duas vezes):
Respondeu 01/08/2008 em 14:08 2008-08-01 14:08 share
fonte usuário Karl Seguin
Ter um olhar para este artigo
IANA programador actionscript, no entanto, o sentimento que eu estou recebendo é que, porque o coletor de lixo pode não funcionar quando você quer que ele.
Daí http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/
Então, eu recomendo experimentar o seu código de coleção e ver se isso ajuda
fonte usuário Jax
Eu acredito que você respondeu a sua própria pergunta ...
System.totalMemorydá-lhe a quantidade total de memória que está sendo "usado", não atribuído. É preciso que a sua aplicação só pode estar usando 20mb, mas tem 5MB que é livre para alocações futuras.
Eu não tenho certeza se os documentos Adobe iria lançar luz sobre a maneira que ele gerencia a memória ...
Respondeu 01/08/2008 em 15:03 2008-08-01 15:03 share
fonte usuário Redbaron
Infelizmente, quando se trata de gerenciamento de memória em Flash / ActionScript não há um lote inteiro que você pode fazer. ActionScript foi projetado para ser fácil de usar (para que eles não querem que as pessoas têm de se preocupar com o gerenciamento de memória)
O seguinte é uma solução alternativa, em vez de criar uma ByteArrayvariável tentar isso.
Onde byteArrayé uma propriedade dinâmica de byteObject, você pode liberar a memória que foi alocada para ele.
Respondeu 01/08/2008 em 14:14 2008-08-01 14:14 share
Então, se eu carregar dizer 20MB a partir do MySQL, no Gerenciador de Tarefas do RAM para a aplicação sobe por cerca de 25MB. Então, quando eu fechar a ligação e tentar eliminar o ByteArray, a RAM não libera. No entanto, se eu usar System.totalMemory, flash player mostra que a memória está sendo liberada, o que não é o caso.
É o flash player fazendo algo como Java e reservando espaço de pilha e não liberá-lo até que o aplicativo é encerrado?
Bem, sim e não, como você pode ter lido a partir de inúmeras blogposts o GC em AVM2 é otimista e vai trabalhar a sua própria maneira misteriosa. Então ele faz trabalhar um pouco como Java e tenta reservar espaço de pilha, no entanto, se você deixar o tempo suficiente e começar a fazer outras operações que estão consumindo alguma memória significativa que irá liberar o espaço anterior. Você pode ver isso usando o profiler durante a noite com alguns testes rodando em cima de seu aplicativo.
Respondeu 17/09/2008 em 11:09 2008-09-17 11:09 share
fonte usuário Pedro
O jogador está "liberando" a memória. Se você minimizar a janela e restaurá-lo você deve ver que o memeory é agora muito mais perto do que mostra System.totalMemory.
Você também pode estar interessado em usar ferramentas de perfil do FlexBuilder, que pode mostrar-lhe se você realmente tem vazamentos de memória.