Andrews (Android App) otimização de desempenho, para resolver uma série de problemas Caton, estouro de memória

Na verdade, otimização de desempenho em linha Andrews escreveu muitos artigos, não queria escrever, mas de repente viu um ponto não previamente notado hoje, com sua habitual também experimentou muito, por isso queria escrever todos os problemas de desempenho saber todos juntos, vou continuar a actualizar este artigo.

1. reciclagem

        Normalmente, uma menor eficiência do que ao acessar uma propriedade da variável fixa, se a sua estimativa do número de ciclos muitas vezes maiores do que 5,
a suposição geral de que o valor é maior do que 5 método xxx.GetLength (), sob circunstâncias normais, seria tão escritos, como
para ( i = 0 int; i <xxx.GetLength (); i ++)
xxx.GetLength aqui cada ciclo deve ser chamado, irá afectar inevitavelmente a eficiência do programa, no desenvolvimento de jogos torna-se ainda mais evidente,
métodos melhorados devem ser
int j = xxx.GetLength ()
para (int i = 0; i <j; i ++)  

Por que escrever este primeiro, porque este é semelhante a um pequeno ponto que normalmente difícil de prestar atenção, quando eu escrevo esta é a primeira vez que vi este ponto.

Figura 2. Otimização

        Este é o maior problema que encontramos no início do desenvolvimento, a memória é a imagem causado pelo derramamento.

       A. O primeiro é o tamanho da imagem do problema, porque muitas vezes os artistas dar o nosso mapa é muito grande, levando a memória quando carregamento demais para a grande imagem que eu recomendo um site

https://tinypng.com/ , este site pode ser a compressão sem perda de imagem, a taxa de compressão é muito alta, muito bom. Se é um pequeno mapa que mostra a obra de arte proposto para o SVG, e então convertido pelo estúdio android vem com recursos para o formato vetorial, assim você pode jogar bons resultados de otimização.

       II. Uma vez que a imagem do uso de recursos não foram liberados devido ao estouro de memória, a prioridade que você precisa de olhar para fotos da arquitetura de cache de três níveis, em que eu não recomendo que você escreva seu próprio cache de nível três, porque não existe um quadro pré-feito para o bem por que perder tempo, mas certamente muito para escrever os seus próprios problemas, mas deve entender os princípios envolvidos, então eu dirigir este quadro recomendamos o uso de várias imagens para carga, após vários imagem Frame de carregamento é agora o quadro mainstream, pode ser muito eficaz resolver estouro de problemas de memória de imagem, como as vantagens e desvantagens de cada alto-falante, como usar seu próprio google-lo, além de Fresco com menos pessoas do que os três primeiros são muito usados.

Você deve aprender a usar um monte de boas estruturas e ferramentas, ficar sobre os ombros de gigantes você pode ver mais longe

3.String splicing corda

      Muitas vezes corda encontro concatenação ao escrever código, mas na maioria das vezes é a maneira de escrever duas cordas são adicionados, esta é realmente uma abordagem muito ineficiente, e nós realmente usar a maior parte do StringBuffer e StringBuilder a costura, o seguinte é uma eficiência comparação splicing destes três maneiras

String s = "";
long sBeginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
     s+="s";
}
long sEndTime = System.currentTimeMillis();
System.out.println("s拼接100000遍s耗时: " + (sEndTime - sBeginTime) + "ms");
         
StringBuffer s1 = new StringBuffer();
long s1BeginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
     s1.append("s");
}
long s1EndTime = System.currentTimeMillis();
System.out.println("s1拼接100000遍s耗时: " + (s1EndTime - s1BeginTime) + "ms");
         
StringBuilder s2 = new StringBuilder();
long s2BeginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
    s2.append("s");
}
long s2EndTime = System.currentTimeMillis();
System.out.println("s2拼接100000遍s耗时: " + (s2EndTime - s2BeginTime) + "ms");

     

     Este é o resultado do teste, é claro que o uso da concatenação + corda, que é a eficiência significativamente mais baixo, e o uso de StringBuilder StringBuf de acréscimo () método para a eficiência de splicing centenas ou mesmo milhares de vezes utilizando o + splicing, e StringBuf o mais eficiente do que StringBuilder, que deverá atingir um thread-safe StringBuffer, StringBuilder eficiência pouco baixo em relação ao inevitável. Portanto, a operação de acumulação da cadeia de caracteres, a combinação proposta do problema selecção rosca, evitar o uso da concatenação + corda.

4. Os recursos não utilizados de libertação

     Depois de usar o cursor certeza de cursor.close call () libertou;

     Além disso, estamos habituados a usar manipulador para postDelayed () executar uma tarefa, não se esqueça de sair, ele chama handler.removeCallbacksAndMessages (null) para remover todas as mensagens e funções de retorno de chamada.

 

Publicado 24 artigos originais · ganhou elogios 5 · vê 20000 +

Acho que você gosta

Origin blog.csdn.net/qq_26923265/article/details/85340872
Recomendado
Clasificación