현재 VS- 프로파일 링 도구로 .net 응용 프로그램을 최적화하려고합니다.if/else 조건을 최적화하려고하면 프로그램이 느려집니다.
if (someObjectContext.someObjectSet.Where(i => i.PNT_ATT_ID == tmp_ATT_ID).OrderByDescending(i => i.Position).Select(i => i.Position).Count() == 0)
{
lastPosition = 0;
}
else
{
lastPosition = someObjectContext.someObjectSet.Where(i => i.PNT_ATT_ID == tmp_ATT_ID).OrderByDescending(i => i.Position).Select(i => i.Position).Cast<int>().First();
}
내가 이런 식으로 변경 : 매우 자주 호출되는
하나의 기능은 다음과 같은 코드를 포함 나는 변화가 가속화 할 것으로 기대했다
var relevantEntities = someObjectContext.someObjectSet.Where(i => i.PNT_ATT_ID == tmp_ATT_ID).OrderByDescending(i => i.Position).Select(i => i.Position);
if (relevantEntities.Count() == 0)
{
lastPosition = 0;
}
else
{
lastPosition = relevantEntities.Cast<int>().First();
}
컴파일러가 쿼리가 두 번 수행되고 결과를 캐시한다는 사실을 확신 할 수 없었기 때문에 약간의 방법이 필요했습니다.
놀랍게도이 방법의 실행 시간 (inklusive 샘플링 수) 왜 이런 일
이사람이 설명 할 수 (프로파일)에 따라 감소하지만,도 9 % 증가되지?
성능에 관계없이 두 번째 예는 DRY 규칙에 따라 작성되고 유지 보수가 용이 한 코드입니다. – JohnFx
각 버전별로 생성 된 IL을 비교하십시오. – harpo
어떻게하면됩니까? – ChNissen