2013-06-12 2 views
2

저는 C#에 매우 익숙합니다. 그래서 제게 약간의 무지를 허락 해주세요 :) (나는 성능의 차이에 대한 이유를 이해하려고 노력했지만 나는 보내는 가정streamwriter는 using 문을 사용하여 정적 대를 선언했습니다.

public static class Logging 
{ 
    readonly static object DebugWriter = new object(); 

    public static void Log(string msg) 
    { 
    lock (DebugWriter) 
    { 
     using (StreamWriter writer = new StreamWriter("Debug.txt", true)) 
     { 
     writer.WriteLine(DateTime.UtcNow.ToString("HH:mm:ss.ffff") + " " + msg); 
     } 
    } 
    } 
} 

: 내가 여기에 지식이 관객에게 줄 알았는데, 그래서 내가 좋아하는 StreamWriter를 뭔가를 사용하는 경우 아직 ... 기본적으로) ...

을 최종 답변을하지 않습니다 이 클래스를 통해 많은 양의 텍스트가 나오면 CPU에서 눈에 띄는 히트를 보게됩니다.

public static class Logging 
{ 
    readonly static object DebugWriter = new object(); 
    static StreamWriter lwriter = new StreamWriter("LocalDrivenDebug.txt", true) { AutoFlush = true }; 

    public static void Log(string msg) 
    { 
    lock (DebugWriter) 
    { 
     lwriter.WriteLine(DateTime.UtcNow.ToString("HH:mm:ss.ffff") + " " + msg); 
    } 
    } 
} 

가 그럼 난 전혀 CPU에 거의 아무런 타격을 볼 : 그러나 내가 대신 그것의 라인을 따라 뭔가를 작성하는 경우.

CPU가 순전히 inialisation 및 disposal을 사용하여 발생하는 진술을 통해 CPU를 처리 할 수 ​​있습니까? (그렇다면 도대체 C#이 CPU를 많이 먹기 위해 무엇을하고 있나?) - 정적 클래스이고 자동 플러시를 강제했습니다. 두 번째 버전에도 동일하게 적용됩니다. 그렇지 않으면 처분이 다르게 작동하여 씹을 수 있습니다. 더 적은 CPU 시간?

나는 분명히 뭔가 빠져 있다고 가정 할 수 있습니다. 그래서 저 밖에있는 누군가가 제 생각에 저에게 계몽을 할 수 있습니다. '당신이 사용법을보다 안전하고 편리한 방법으로 사용하겠다고 생각 했었습니까?

+3

첫 번째 코드 단편은 Log가 호출 될 때마다 파일을 열고 닫습니다. 두 번째 스 니펫은 프로그램 기간 동안 한 번만 파일을 엽니 다. 전자의 오버 헤드는 현재보고있는 CPU 사용량에 기여합니다. –

+1

'Log'를 여러 번 호출하고 있습니까 ??? 그렇다면 using 문은 작성자에게 'Every Time'을 작성하고 처리하는 것입니다. –

+0

예 로그에 실제 코드가 호출되어 직렬 통신을 모니터링하고 프로그램에서 예외가 발생한 경우 (또는 오히려) 스택 추적을 제공합니다. 마치 순전히 통증을 일으키는 처분 메커니즘 인 것처럼 들립니다. 위의 코드 중 두 번째 변형에서 Autoflush 속성을 설정하면 Streamwriter가 클래스 호출 종료시 데이터를 플러시하게됩니다. – Grabble

답변

0

두 번째 코드 단편에는 두 가지 속성이 있습니다. - 작성자를 다시 작성하지 않아 로그를 여러 번 호출하면 도움이 될 수 있습니다. - 작성자를 처리하지 않습니다. 즉, 작성중인 텍스트가 디스크로 아직 플러시되지 않았지만 나중에 플러시를 위해 메모리에 유지됩니다. 다른 한편으로, 당신은 디스크에 첫 번째 스 니펫으로 로그 할 모든 호출을 씁니다.

이 두 가지 효과는 눈에 띄는 차이를 설명해야합니다.

+0

또한 두 번째 것은 앱이 실행되는 동안 로그 파일을 잠근 상태로 유지합니다. –

관련 문제