Exemple:Instrumentation appels de méthode dans une application Web en utilisant PostSharp
ajouter un attribut PostSharp à une méthode pour assurer un chronomètre est déclenché avant que la méthode est appelée, et arrêté juste après le retour d'appel. Cette méthode est utilisée dans une application Web, elle sera donc appelée par plusieurs threads.
Je stocke le résultat du chronométrage du chronomètre dans une collection threadsafe statique, à utiliser par tous les threads. Cette collection peut ensuite être lue par un autre thread de surveillance à des fins d'analyse.
Est-ce que cela forcera effectivement tous les appels de méthode à se bloquer pendant qu'ils attendent que le verrou de la collection soit libéré? (afin qu'ils puissent compléter le bloc de code postsharp).
La messagerie asynchrone utilisant MSMQ permettrait-elle une solution non bloquante à ce problème?
PostSharp Code Attribut:
// ...
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?
}
// ...