2017.11.03 .net 성능 최적화 및 알고리즘 최적화

2545 단어
나눔자: 진부남

1. 쓰레기 수거


.net Framework 자체 쓰레기 수거 메커니즘대상이 아직 쓸모가 있는지 없는지를 자동으로 판단하고 쓸모없는 것은 회수된다는 것이다.대상의 생성이든 회수든 모두 성능을 소모하기 때문에 불필요한 대상의 생성을 피해야 한다.
① 순환 생성을 피한다.
    For(){
        Model.X x  = DB.X.function();
        …..
}

-----------------------------------------------

Model.X x  = DB.X.function();;
For(){
        …..
}

② 필요한 논리적 분기에 객체를 만듭니다.
만약 하나의 대상이 하나의 논리 지점에서만 사용된다면, 이 대상의 창설을 이 논리 지점 안에 두어라.
    Model.X x = new Model.X();
    If(){
    
}

------------------------------------------------

If(){
    Model.X x = new Model.X();
}

③ 한 번 만들고 여러 번 사용한다.공간 분배 문제.
    Model.X x =null;
For(){
    x = new Model.X();
        …..
}
    ----------------------------
For(){
    Model.X x = new Model.X();
        …..
}

2. String 작업


StringBuilder를 사용하여 문자열 연결
String은 불변 클래스입니다. + 조작 연결 문자열을 사용하면 새로운 문자열을 만들 수 있습니다.문자열 연결 횟수가 고정되어 있지 않으면, 예를 들어 하나의 순환에서stringBuilder 클래스를 사용하여 문자열 연결 작업을 해야 합니다.StringBuilder 내부에 StringBuffer가 있기 때문에 연결 작업은 매번 새로운 문자열 공간을 분배하지 않습니다.연결된 문자열이 버퍼 크기를 초과할 때만 새로운 버퍼 공간을 신청할 수 있습니다.일반 코드는 다음과 같습니다.
StringBuilder sb = new StringBuilder( 256 );
for ( int i = 0 ; i < Results.Count; i ++ )
{
sb.Append (Results[i]);
}

만약 연결 횟수가 고정되고 몇 번밖에 없다면, 이때는 직접 +호로 연결하여 프로그램이 간결하고 읽기 쉽도록 유지해야 한다.실제로 컴파일러는 이미 최적화를 해서 더하기 횟수에 따라 서로 다른 매개 변수의 개수의String을 호출할 것이다.Concat 메서드.예: String str = str1 + str2 + str3 + str4
String으로 컴파일됩니다.Concat(str1, str2, str3, str4).이 방법은 내부에서 전체 스트링 길이를 계산하고 한 번만 분배하며 보통 상상하는 것처럼 세 번 분배되지 않는다.문자열 연결 작업이 10회 이상일 때 경험치로서 StringBuilder를 사용해야 합니다.
가장 빠른 빈 문자열 비교 방법 사용하기
4
  • String 객체의 Length 속성을 0과 비교하는 것이 가장 빠른 방법:if(str.Length==0)

  • 4
  • 그 다음은 String.Empty 상수 또는 빈 문자열 비교:if(str==String.empty) 또는if(str==")입니다

  • 3. 알고리즘 최적화


    일반적으로 성능이 떨어지는 이유는 데이터가 많아서 순환 횟수가 많거나 순환체에서 DB 조회 데이터를 여러 번 사용하기 때문이다.전반적으로 말하면 하나의 함수 게임은 수천 수만 번의 데이터베이스에 접근해야 한다.이때 우리 집에는 데이터 사전 같은 것이 필요하다.순환하기 전에 순환에서 여러 번 방문할 데이터 테이블을 한꺼번에 찾아내는 것이다(가능한 한 제한 조건을 더한다)
    이유:
    4
  • 우선 메모리가 하드디스크보다 빠르다.데이터베이스는 하드디스크에 있고 다른 사람의 컴퓨터 하드디스크에 있을 가능성이 더 높다.수조는 자신의 컴퓨터 메모리에 있다

  • 4
  • 데이터베이스 연결의 열기와 닫기는 시간이 많이 걸린다.마치 우리가 데이터 테이블에 데이터를 삽입할 때 SqlPackage로 마지막으로 모든 sql문장을 데이터베이스에 한꺼번에 실행해야 하는 것처럼 DB를 만드는 것이 아니라Add() 하나.

  • 물론 수조를 옮길 때도 최대한 최적화해야 한다.예를 들어 순환하는 집행체에 제한을 많이 넣으면 어떤 문장의 달리기 횟수가 줄어든다.또 브레이크를 능숙하게 사용하는 등 불필요한 후속 순환을 피하는 것도 좋다.
    이상의 많은 것들은 모두 제 개인적인 이해입니다. 만약 잘못이 있으면 많이 지적해 주십시오!

    좋은 웹페이지 즐겨찾기