2011-05-04 6 views
0

내 wpf 응용 프로그램에서 ThreadTime을 bleow로 사용했습니다.C# ThreadTimer 콜백 객체

TimerCallback tcb = new TimerCallback(TimerTask); 
tmrdetectchanges = new Timer(tcb, "", 100, tmrinterval); 

private void TimerTask(object data) 
{ 
    DetectChanges(); 
} 

TimerTask 매개 변수에 ""을 사용하지 않았습니다. 내 프로그램에 어떤 영향이 있습니까? 내 경우에는이 param 사용해야합니까? 제발 조언. 감사.

+0

""대신 String.Empty를 사용합니다. 그것은 아주 작은 최적화입니다. – RedDeckWins

+0

@Red : 틀린; 그들은 같은 일리노이로 컴파일합니다. – SLaks

답변

2

'거의 영향을 미치지 않습니다.' 일부는 있지만 너무 적어서 알아 차리지 못할 수도 있습니다. ""을 전달하면 힙에 새로운 문자열 객체가 할당되어 가비지 컬렉터가 찾아서 자유롭게해야합니다. 따라서 상대적으로 빠를 것이라고 확신합니다.

사용자 데이터 매개 변수를 사용하지 않으므로 null을 전달하십시오. 완벽하게 유효하고 그 작은 CPU 사이클 (전화 및 가비지 수집 모두에 대한)

편집 : 다른 사람들이 나를 정정했듯이, null이 아닌 문자열을 전달하는 것은 거의 거의 영향을 미치지 않습니다. 그러나 null을 전달할 경우 CPU주기가 거의 절약됩니다. ""을 전달하면 귀하의 경우에 아무런 도움이되지 않는 추가 어셈블리 명령어가 생성됩니다.

참고 디버그 빌드 및 릴리스 최적화가 가능하므로 아무런 차이가 없음을 확인했습니다. . 나는 그 사건 :

+2

문자열 리터럴은 힙에 할당되지 않습니다. –

+0

오브젝트 유형으로 전달되는 경우 박스형으로 끝나는 것이 확실합니다. 문자열은 아니지만 콜백으로 끝날 때까지는 그렇습니다. – DXM

+0

참조 유형 참조는 박스로 표시되지 않습니다. –

3

MSDN에서인지 확실히 누군가가 나 해결됩니다 해요 :

public delegate void TimerCallback(Object state) 

상태

유형 :은 System.Object

을 포함하는 객체 응용 프로그램 별 정보 이 호출하는 메서드와 관련이 있습니다. 대표자, 또는 null.

대신 null을 전달하십시오.