2009-06-15 2 views
0

누가 더 빨라질 수 있습니까? 그리고 왜 ?코드 최적화

1 :

Point point = new Point(25,25); //any numbers.. 
Point point2 = new Point(20,95); //any numbers.. 

Graphics g = CreateGraphics(); 
g.DrawLine(point,point2); 

또는

2

:

Graphics g = CreateGraphics(); 
g.DrawLine(new Point(25,25),new Point(20,95)); 
+2

당신에게 System.Diagnostics.StopWatch를 사용하여 벤치 마크 있습니다 sugest합니다. 질문은 더 넓은 청중에게 가치가 거의 없거나 전혀 없습니다 ... –

+1

나는 질문이 유효하다고 생각합니다, 왜 downvotes !! –

+3

질문은 유효하지만 무의미합니다. 기껏해야 미세 최적화, 최악의 환경 설정입니다. – Eric

답변

4

나도, (특히 JITing 후) 가독성의 손실을 제외하고 그들 사이에 아무런 실질적 차이가 없다.

+0

메모리는 어떨까요? 나는 첫 번째가 메모리에서 두 점 (대상)을 생성하지만 두 번째 점은 메모리에서 생성하지 않는다고 생각 했는가? 그게 바로 ??? – Sherif

+1

@mavric - 스택에서 같은 방식으로 생성됩니다 (적어도 Point는 구조라고 생각합니다).참조 유형과의 유일한 차이점은 # 1에서 디버그 모드에서 메소드를 종료 할 때까지 Point 객체가 수집되지 않는다는 것입니다. 해제 모드에서 개체의 수명은 동일합니다. –

0

2 g.DrawLine에 전달하기 전에 개체에 대한 중간 포인터를 만들지 않으므로 속도가 빨라질 수 있습니다. 그러나 그것이 point와 point2를 사용하는 유일한 곳이라면 컴파일러가 최적화되어 바이너리가 동일 할 것입니다.

15

둘 다 스 니펫이 동일한 MSIL 코드 표현으로 컴파일되므로 이들 중 아무 것도 아닙니다.

게다가 이것은 마이크로 최적화이기 때문에 실제로는 이 병목임을 알기 전에 피해야합니다.

2

어느 빠르다, 전부 렌더링 경로에 그 포인트를 할당하고 그들에게 precreates 피할 하나가 될 것입니다 가장 빠른 이전 그것은 모두 당신이하고있는 다른 사람에 따라 달라집니다

0

.

당신이 거의 아무것도하지 않는다면 (나는 의심 스럽습니다), 이것이 "병목 현상"입니다.

이는 "병목"당신은 여전히 ​​지배적이다 모르는 경우 :

  • 이 "새로운"의 및 관련 생성자, 소멸자, 쓰레기 수집.

  • 실제로 행을 렌더링합니다.

두 번째는 아마도 불가피하지만 첫 번째는 스타일상의 이유 때문입니다.

프로파일 링 또는 this simple method으로 확인할 수 있습니다.

또는 당신이 가지고있는 전체 질문 방지 할 수 있습니다

g.DrawLine(25,25,20,95);