3

우리가 호출하는 웹 서비스에 대한 성능 문제가 있습니다. 실제 웹 서비스 메서드 자체에 시간 기록 코드를 배치 할 수 있었지만 이제는 결과 집합을 serialize하는 데 걸리는 실제 시간이 문제가 될 수있는 것처럼 보입니다.웹 서비스에서 반환되는 객체를 직렬화하는 데 걸리는 시간을 기록 할 수 있습니까?

[AuthExtension] 
[WebMethod] 
[SoapHeader("AuthHeader", Direction = SoapHeaderDirection.In)] 
public ResultSet CheckAvailability(FareSelections fareSelections) 
{ 
    ResultSet results = null; 
    results = Logic.CheckAvailability(fareSelections, AuthHeader.Token, timeLogger); 
    return results; 
} 

나는 시도했다 :

그래서 우리가 여기에

는 예를 들어 웹 서비스 방법입니다 .. 긴이 데이터가 걸리는 직렬화, 그러나 어떤 결과를 얻기 위해 고군분투하는 방법을 기록하기 위해 찾고 있어요 [OnSerializing()] 및 [OnSerialized()] 특성으로 꾸며진 반환되는 클래스에 메서드를 배치하지만 작동하지 않습니다. 또한 try..finally 블록을 사용하여 메서드에서 타이밍을 캡처하려고 시도했지만 실제 직렬화 시간도 기록하지 않는다고 생각하십니까?

(필자는 타이밍을 기록하고 기본 직렬 변환기를 호출하는) 자체 serializer를 구현해야 할 수도 있지만이 옵션이 내가 가지고있는 유일한 옵션인지 궁금한가요?

모든 의견은 대단히 감사하겠습니다.

답변

2

당신은 Custom SoapExtension을 사용할 수 있습니다. ProcessMessage() 메서드에서 직렬화 전후의 4 개 이벤트와 비 직렬화 전후의 4 개의 이벤트를 볼 수 있습니다. Befores에서 스톱 워치를 시작하고 Afters에서 종료 한 다음 어딘가에 시간을 저장하십시오.

+0

이것은 갈 수있는 방법이다. 거기에 내 TimeLogger 클래스를 배치하고 메시지가 나타날 때 호출 할 것이다. .Stage는 BeforeSerialize이고 message.Stage는 AfterSerialize입니다.이 제안을 주셔서 대단히 감사합니다. –

+0

건배하면 결과를 serialize하는 것이 큰 검색에서 30 초 이상 걸릴 수 있습니다. 그 정보를 직렬화하여 프론트 엔드로 가져 오는 방법. 답변 해 주셔서 감사합니다. –

0

는 메모리에서 Stopwatch 객체

주위에 전화를 워프 :

Stopwatch sw = Stopwatch.Startnew(); 
    //stuff 
    sw.Stop(); 
    print sw.ElapsedMilliseconds(); 
+0

나는 VS 또는 내 프로젝트를 준비하고 있지 않으므로 구문이 잘못되었을 수도 있지만 수정하기가 쉽다. – Fredou

0

서비스 추적 뷰어를 사용하여 각 요청의 소요 시간을 확인할 수 없습니다.

0

질문에 해당 방법을 프로파일 링하려면 Ants profiler과 같은 것을 사용해야합니다. 매우 좋은 통찰력을 줄 것입니다.

관련 문제