예를 사용하여 웹 응용 프로그램에서 호출계측 PostSharp
난 그냥 호출이 반환 후 메소드가 호출되기 전에 스톱워치가 시작되었는지 확인하는 방법에 PostSharp 속성을 추가하고 멈췄다. 이 메서드는 웹 응용 프로그램에서 사용되므로 여러 스레드에서 호출됩니다.
스톱워치 타이밍의 결과를 모든 스레드가 사용할 정적 스레드 세이프 콜렉션에 저장합니다. 이 컬렉션은 분석 목적으로 다른 모니터링 스레드에서 읽을 수 있습니다.
컬렉션의 잠금이 해제 될 때까지 기다리는 동안 모든 메서드 호출이 차단되도록하는 효과가 있습니까? (그래서 그들은 포스트 샤프 코드 블록을 완성 할 수있다).
MSMQ를 사용하여 비동기 메시징을 사용하면이 문제에 대한 비 차단 솔루션을 사용할 수 있습니까?
PostSharp 속성 코드 :이 효과적으로 모든 방법 강제
// ...
public static ThreadSafeCollection _collection;
public override void OnInvocation(MethodInvocationEventArgs eventArgs)
{
var start = DateTime.Now;
eventArgs.Proceed();
var timeSpent = (DateTime.Now - start).TotalMilliseconds;
_collection.Add(timeSpent); //will this cause all
//method calls to methods
//decorated with this
//attribute to block on the
//_collection addition?
}
// ...