2010-11-16 5 views
0

J'ai un composant tiers qui utilise la fonctionnalité TraceSwitch pour me permettre de générer des traces de ce qui se passe à l'intérieur. Malheureusement, exécuter les commutateurs en mode verbeux, avec un TextWriterTraceListener en tant que consommateur (sorties vers le fichier) ralentit trop l'application.TextWriterTraceListener sur le thread d'arrière-plan

Il n'est pas critique que les données tracées soient écrites immédiatement, donc est-il possible d'écrire les données sur un thread de priorité inférieure? Peut-être une tâche?

EDIT

Après analyse, il semble simplement allumer les interrupteurs sans attacher l'auditeur provoque le ralentissement. Je vais me procurer le fournisseur de composants.

Serait toujours intéressant d'entendre une réponse si.

Répondre

1

Écrivez votre propre extension au TraceListener. Dans l'extension, placez toutes les chaînes de trace sur une chaîne List> et lorsque le compte devient suffisamment élevé, écrivez la liste dans un fichier et effacez la liste pour recommencer. Vider la liste sur Dispose().

Cela peut ensuite être facilement étendu pour utiliser le pool de threads pour mettre en file d'attente une nouvelle tâche que l'écriture réelle.

Cela ne garantit pas que vous allez améliorer les performances. Cela n'aidera que si vous êtes sûr que c'est l'IO qui ralentit les choses.

Questions connexes