例一個Web應用程序:儀器方法的調用使用PostSharp
我添加了一個PostSharp屬性的方法,以確保被稱爲方法實施前的啓動秒錶,並停止只是調用返回後。此方法用於Web應用程序,因此它將被多個線程調用。
我將秒錶計時的結果存儲在靜態線程安全集合中,供所有線程使用。爲了分析的目的,這個集合可以被另一個監視線程讀取。
這將有效地強制所有的方法調用阻止,而他們等待集合上的鎖被釋放? (以便他們可以完成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?
}
// ...