[TUTORIAL] Dicas Para Otimização de Código
2 participantes
Página 1 de 1
[TUTORIAL] Dicas Para Otimização de Código
Espero Que Gostem.
> ARRAY é mais rápido que o LIST
Uma lista genérica armazena os dados no formato Object. Quando fazemos o armazenamento de inteiros eles são convertidos para um valor de referência para serem armazenados e isso tem um custo.
> FOR é mais rápido que o FOREACH
O laço Foreach fornece um enumerator sobrecarregando o método IEnumerable.GetEnumerator. Isso faz com que ambos administrem a pilha e a função virtual em tipos simples causando um overhead. Mesmo usando coleções o laço FOR é mais rápido.
> "StringBuilder" é Muito Mais rápido que Concatenar strings do jeito normal.
EXEMPLO DE USO:
> SEALED
As classes que não precisam ser herdadas podem ser marcadas como sealed. As classes sealed removem as características das classes e permitem ao .NET Framework realizar várias otimizações em tempo de execução.
Quando aplicado a uma classe, o modificador sealed impede que outras classes herdem a partir desta classe. Ou seja uma classe sealed não pode ser herdada.
No exemplo a seguir, de classe B herda da classe A, mas nenhuma classe pode herdar da classe B.
class A { }
sealed class B : A { }
class c :B { }
Ao tentarmos declarar a classe C herdando da classe B teremos um erro em tempo de compilação indicando : Sealed.C': cannot derive from sealed type 'Sealed.B.
> Comparando Strings Non-Case-Sensitive
Muitas vezes temos que comparar duas variáveis strings, sem considerar o case sensitive. O recurso mais usado é converter ambas as strings para caixa baixa (minúsculas) ou caixa alta (maiúsculas) e então comparar as duas strings da seguinte forma:
str1.ToLower() == str2.ToLower()
Porém usar repetidamente a função ToLower() afeta o desempenho.
Uma escolha melhor é usar a função string.Compare() .
Assim podemos fazer:
string.Compare(str1, str2, true) == 0
A função string.Compare() retorna um inteiro que é igual a 0 quando as duas strings forem iguais.
> Utilize String.Empty ao invés de ""
A sugestão em usar string.Empty não é tanto pelo fator desempenho mas para facilitar a leitura e entendimento do seu código.
Ao invés de usar:
if (str1 == "")
prefira usar:
if (str1 == string.Empty)
É uma boa prática de programação e não causa um impacto negativo no desempenho da aplicação.
> ARRAY é mais rápido que o LIST
Uma lista genérica armazena os dados no formato Object. Quando fazemos o armazenamento de inteiros eles são convertidos para um valor de referência para serem armazenados e isso tem um custo.
> FOR é mais rápido que o FOREACH
O laço Foreach fornece um enumerator sobrecarregando o método IEnumerable.GetEnumerator. Isso faz com que ambos administrem a pilha e a função virtual em tipos simples causando um overhead. Mesmo usando coleções o laço FOR é mais rápido.
> "StringBuilder" é Muito Mais rápido que Concatenar strings do jeito normal.
EXEMPLO DE USO:
- Código:
using System.Diagnostics;
using System.Text;
StringBuilder sb = new StringBuilder("AEIOU");
for (int i = 0; i < 500; i++)
{
sb.Append("AEIOU");
}
> SEALED
As classes que não precisam ser herdadas podem ser marcadas como sealed. As classes sealed removem as características das classes e permitem ao .NET Framework realizar várias otimizações em tempo de execução.
Quando aplicado a uma classe, o modificador sealed impede que outras classes herdem a partir desta classe. Ou seja uma classe sealed não pode ser herdada.
No exemplo a seguir, de classe B herda da classe A, mas nenhuma classe pode herdar da classe B.
class A { }
sealed class B : A { }
class c :B { }
Ao tentarmos declarar a classe C herdando da classe B teremos um erro em tempo de compilação indicando : Sealed.C': cannot derive from sealed type 'Sealed.B.
> Comparando Strings Non-Case-Sensitive
Muitas vezes temos que comparar duas variáveis strings, sem considerar o case sensitive. O recurso mais usado é converter ambas as strings para caixa baixa (minúsculas) ou caixa alta (maiúsculas) e então comparar as duas strings da seguinte forma:
str1.ToLower() == str2.ToLower()
Porém usar repetidamente a função ToLower() afeta o desempenho.
Uma escolha melhor é usar a função string.Compare() .
Assim podemos fazer:
string.Compare(str1, str2, true) == 0
A função string.Compare() retorna um inteiro que é igual a 0 quando as duas strings forem iguais.
> Utilize String.Empty ao invés de ""
A sugestão em usar string.Empty não é tanto pelo fator desempenho mas para facilitar a leitura e entendimento do seu código.
Ao invés de usar:
if (str1 == "")
prefira usar:
if (str1 == string.Empty)
É uma boa prática de programação e não causa um impacto negativo no desempenho da aplicação.
Magnatah- Instrutor
- PONTOS : 3547
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: [TUTORIAL] Dicas Para Otimização de Código
Amo demais esse tipo de tutorial... Tem várias coisas inclusive que eu já uso.
A questão que trago para este tópico agora é: É possível modificar string sem gerar garbage? Me lembro de tentar modificar strings a uns 2 anos atrás, utilizando StringBuilder, e eu vi que gerava mais garbage do que concatenar strings na mão mesmo... Ai surge a dúvida. Será que é possível juntar strings sem alocar memória?
A questão que trago para este tópico agora é: É possível modificar string sem gerar garbage? Me lembro de tentar modificar strings a uns 2 anos atrás, utilizando StringBuilder, e eu vi que gerava mais garbage do que concatenar strings na mão mesmo... Ai surge a dúvida. Será que é possível juntar strings sem alocar memória?
Re: [TUTORIAL] Dicas Para Otimização de Código
MarcosSchultz escreveu:Amo demais esse tipo de tutorial... Tem várias coisas inclusive que eu já uso.
A questão que trago para este tópico agora é: É possível modificar string sem gerar garbage? Me lembro de tentar modificar strings a uns 2 anos atrás, utilizando StringBuilder, e eu vi que gerava mais garbage do que concatenar strings na mão mesmo... Ai surge a dúvida. Será que é possível juntar strings sem alocar memória?
Eu Pesquisei Bastante Sobre Isso Há Um Tempo Atrás e Tambem Fiz uns Testes mas Sem Resultados.
Magnatah- Instrutor
- PONTOS : 3547
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Movimento simples para objetos filiados ao FPSController da Unity por código.
» [TUTORIAL] 42 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)
» [TUTORIAL] Dicas de otimização
» Dicas de Otimização para jogos 2D
» [RESOLVIDO] Dicas de Otimização
» [TUTORIAL] 42 ÓTIMAS DICAS DE OTIMIZAÇÃO PARA JOGOS MOBILE (Android)
» [TUTORIAL] Dicas de otimização
» Dicas de Otimização para jogos 2D
» [RESOLVIDO] Dicas de Otimização
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos