C#에서 성능 향상 - 파트 1

Neste post, vamos comentar sobre algumas melhorias que podemos fazer para obter uma melhor performance do código produzido.

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.
아브라소.

좋은 웹페이지 즐겨찾기