2017.11.03 .net 성능 최적화 및 알고리즘 최적화
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
4
3. 알고리즘 최적화
일반적으로 성능이 떨어지는 이유는 데이터가 많아서 순환 횟수가 많거나 순환체에서 DB 조회 데이터를 여러 번 사용하기 때문이다.전반적으로 말하면 하나의 함수 게임은 수천 수만 번의 데이터베이스에 접근해야 한다.이때 우리 집에는 데이터 사전 같은 것이 필요하다.순환하기 전에 순환에서 여러 번 방문할 데이터 테이블을 한꺼번에 찾아내는 것이다(가능한 한 제한 조건을 더한다)
이유:
4
4
물론 수조를 옮길 때도 최대한 최적화해야 한다.예를 들어 순환하는 집행체에 제한을 많이 넣으면 어떤 문장의 달리기 횟수가 줄어든다.또 브레이크를 능숙하게 사용하는 등 불필요한 후속 순환을 피하는 것도 좋다.
이상의 많은 것들은 모두 제 개인적인 이해입니다. 만약 잘못이 있으면 많이 지적해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.