C#에서 성능 향상 - 파트 1
6424 단어 performancecsharpprogramming
Algumas dicas podem se tornar unlevantes se a quantidade de dados processada for pequena. Então, não precisa sair alterando seus codigos somente para obter uma melhora que é impercepível para o usuário.
Muitos desenvolvedores tem a preocupação de otimizar seus codigos, obtendo uma melhor performance em mepo de execução. Isso melhora a experencia de usuário, pois ele não ficará esperando tempo desnecessário aguardando uma resposta da aplicação. Além disso, economiza recursos de sistema.
Alguns foram encontrados em revisões de código que fiz e sugeri ou eu mesmo apliquei as melhorias.
코모메디르?
Para a medição da performance de código utilizaremos uma classe chamada StopWatch , pois é muito mais precisa do que a classe DateTime .
using System.Diagnostics;
var stopWatch = new Stopwatch();
stopWatch.Start();
//Código para teste
stopWatch.Stop();
Console.WriteLine("Tempo utilizado: {0}ms", stopWatch.ElapsedMilliseconds);
IF가 없는 상태의 질서
Muitas vezes, não prestamos atenção na ordem de condições no IF. 예를 들어 abaixo(não é dos melhores, eu sei), temos duas condições AcessaBanco() e isActive가 없습니다.
AcessaBanco()는 실행 시간이 짧고 응답이 적으면 true 또는 false이며, 대부분의 항목은 Fornecido에서 활성화됩니다.
public static void Exemplo1(int id, bool isActive)
{
if (AcessaBanco(id) || isActive)
{
Console.WriteLine("entrou");
}
}
Como temos uma condição OU || , o código será executado quando uma das condições for verdadeira. Se o lado esquerdo for verdadeiro, 로고, o lado não é executado.
Podemos mudar, então, para:
public static void Exemplo1(int id, bool isActive)
{
if (isActive || AcessaBanco(id))
{
Console.WriteLine("entrou");
}
}
연산자 && e || 대 & 전자 |
운영자 & e| Avaliarão os dois lados do operando independente do resultado de cada um.
Para começarmos, vamos definir os métodos:
public static bool ValidacaoA()
{
Console.WriteLine("Validacao A");
return true;
}
public static bool ValidacaoB()
{
Console.WriteLine("Validacao B");
return true;
}
Agora vamos ao teste.
No exemplo abaixo, os dois métodos abaixo serão executados.
if(ValidacaoA() | ValidacaoB())
{
Console.WriteLine("Testou os dois");
}
//Saída
//Validacao A
//Validacao B
//Testou os dois
Já os operatores && e||
bool a = false & PerformanceTeste.ValidacaoB();
Console.WriteLine(a);
//Saída
//Validacao B
//False
bool b = true & PerformanceTeste.ValidacaoB();
Console.WriteLine(b);
//Saída
//Validacao B
//True
로고, possível을 위한 se, os operandos && e || 활용.
문자열 비교
Para este teste, foi criada uma lista de 500,000 objetos. Cada objeto da lista contém duas propriedades do tipo string (chamei de MyProperty1 및 MyProperty2). Foram geradas para cada propriedade uma string aleatória de 50 위치.
초기 시험 없음, 비교 PALAVRA1 == PALAVRA2 활용.
Ao executar o teste conforme o código abaixo, obteve-se o resultado de 80ms.
public static bool Exemplo3(string str1, string str2)
{
return str1.ToLower() == str2.ToLower();
}
Ao utilizar string.Compare , 15ms의 결과 확인
public static bool Exemplo3Alterado(string str1, string str2)
{
return string.Compare(str1,str2,true) == 0;
}
Ou seja, apenas com essa mudança obteve-se um melhora de 90%. 나다 말.
목록 e ArrayList
예를 들어 List와 ArrayList의 성능 차이가 다릅니다.
Vamos deixar bem simples e utilizar apenas List e ArrayList com inteiros.
const int _tamanho = 100000;
public static void Exemplo4()
{
ArrayList arrayList = new ArrayList();
for (int i = 0; i < _tamanho; i++)
{
arrayList.Add(i);
}
}
Obteve-se um resultado de 31ms.
Ao utilizarmos o List com um tamanho predefinido (uma forma de obter maior performance) teremos o seguinte: 0ms (!!)
const int _tamanho = 100000;
public static void Exemplo4Alterado()
{
List<int> intlist = new List<int>(_tamanho);
for (int i = 0; i < _tamanho; i++)
{
intlist.Add(i);
}
}
Por enquanto é isso, em breve teremos a parte 2.
아브라소.
Reference
이 문제에 관하여(C#에서 성능 향상 - 파트 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jbcoliveira/dicas-para-melhorar-a-performance-em-c-parte-1-4hlj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)