문제

최근에보고 있던 일부 생산 로그인 코드에서 이것을 발견했습니다 ...

HttpContext.Current.Trace.Write(query + ": " + username + ", " + password));

... 쿼리가 일치하는 사용자를 잡을 수있는 짧은 SQL 쿼리 인 경우. 이것은 어떤 종류의 성능에 영향을 미칩니 까? 나는 그것이 아주 작다고 가정합니다.

또한 HTTP 컨텍스트를 사용 하여이 정확한 유형의 추적 목적은 무엇입니까? 이 데이터는 어디에서 추적됩니까? 미리 감사드립니다!

도움이 되었습니까?

해결책

예, 트레이스 조건부 컴파일 상수가 빌드 중에 정의 될 때마다 성능에 영향을 미칩니다. 무엇이든하는 일은 어떤 유형의 영향을 미칩니다 :)

이것이 응용 프로그램에 중대한 영향을 미치는지 여부에 관해서. 트레이스가 실행되도록 설계되었으며 많은 생산 응용 프로그램에서 실행될 가능성은 거의 없습니다. 이 기능의 남용만이 눈에 띄는 성능 차이로 이어질 것입니다.

그러나 항상 그렇듯이 나를 믿지 말고 프로파일 러를 믿으십시오.

다른 팁

아직 의견에 대한 명성 포인트가 없지만 Jonathan의 답변에 대해 빠른 진술을하고 싶었습니다. 내가 본 숫자는 소수의 문자열 연결에 StringBuilder를 사용하는 것이 합리적이지 않다는 것을 보여주는 것 같습니다. StringBuilder 객체를 만드는 오버 헤드는 연결 속도 이점보다 중요합니다.

이 코드에서 가장 성능 손실은 흔적이 아니라 + 연산자의 사용을 통해 문자열 연결에 있습니다. 이는 성능 측면에서 IO 작업을 이길 수있는 비효율적 인 메모리 작업을 수행합니다. String.concat 또는 StringBuilder 클래스 (또는 해당 물질에 대한 string.format)와 같은 것을 사용하도록 변경합니다.

추적 메시지는 여러 곳으로 갈 수 있습니다. 콘솔, VisualStudio Debug 창, 파일 또는 이벤트 로그의 이름을 추가 (또는 제거) 할 수 있습니다. 당신은 당신의 자신을 만들 수도 있습니다.

또한 릴리스를 위해 컴파일 된 경우 아무것도하지 않도록 추적을 구성 할 수 있습니다.

따라서 트레이스 사용의 성능 영향은 청취자가 활성화 된 내용에 따라 0에서 앱을 완전히 아래로 내리는 것까지 크게 다를 수 있습니다. 그러나 대부분의 청취자는 당신이 기대할 수있는 영향에 대해 가지고 있습니다. 파일, 데이터베이스 또는 콘솔에 작성하려면 많은 작업이 필요하며 추적은 I/O 바운드 활동에 비해 많은 오버 헤드를 추가하지 않습니다.

그리고 Trace가 텍스트 파일에 작성하는 경우 콘솔 IMHO에 글을 쓰는 것보다 더 많은 비용이 듭니다.

"추적은 요청에 추가 오버 헤드를 추가하고 배포 된 응용 프로그램에 대해 활성화되어서는 안됩니다. 그러나 추적이 활성화되지 않을 때 무시되기 때문에 Trace.write () 문을 남길 수 있습니다."

http://msdn.microsoft.com/en-us/library/ms972204.aspx

Trace Source는 리스너에게 메시지를 전달하기 전에 스위치의 Tracelevel을보고 있다고 생각합니다. 따라서 스위치의 기본 Tracelevel 값을 "오류"로 유지하면 "오류"트레이스만이 리스너에게 전송되면 추적 오버 헤드가 크게 줄어 듭니다.

그냥 추측 ... 아직 아무것도 측정하지 않았습니다. 내가하면 업데이트됩니다.

2017 업데이트: ASP.NET 애플리케이션에서 브라우저/원격으로 액세스 가능한 .aspx 페이지에 정보를 추적/로깅하는 매우 편리한 방법 인 것 같습니다.

https://msdn.microsoft.com/en/in/library/z48bew18(v=vs.71).aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top