저는 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 시간?
나는 분명히 뭔가 빠져 있다고 가정 할 수 있습니다. 그래서 저 밖에있는 누군가가 제 생각에 저에게 계몽을 할 수 있습니다. '당신이 사용법을보다 안전하고 편리한 방법으로 사용하겠다고 생각 했었습니까?
첫 번째 코드 단편은 Log가 호출 될 때마다 파일을 열고 닫습니다. 두 번째 스 니펫은 프로그램 기간 동안 한 번만 파일을 엽니 다. 전자의 오버 헤드는 현재보고있는 CPU 사용량에 기여합니다. –
'Log'를 여러 번 호출하고 있습니까 ??? 그렇다면 using 문은 작성자에게 'Every Time'을 작성하고 처리하는 것입니다. –
예 로그에 실제 코드가 호출되어 직렬 통신을 모니터링하고 프로그램에서 예외가 발생한 경우 (또는 오히려) 스택 추적을 제공합니다. 마치 순전히 통증을 일으키는 처분 메커니즘 인 것처럼 들립니다. 위의 코드 중 두 번째 변형에서 Autoflush 속성을 설정하면 Streamwriter가 클래스 호출 종료시 데이터를 플러시하게됩니다. – Grabble