Qu'est-ce que “Sync Bloc” et des conseils pour réduire le comte
Nous avons une application Windows Forms qui utilise une (troisième partie) contrôle ActiveX, et sont à remarquer dans le .Performance NETTE d'objets de vertu ".NET CLR de la Mémoire" que le nombre de "Synchronisation des Blocs" en cours d'utilisation est en constante augmentation avec l'augmentation de l'utilisation de la mémoire), même si notre application est assis inactif.
Le haut-explication de l'évier nombre de bloc états:
Ce compteur affiche le nombre actuel de synchronisation des blocs en cours d'utilisation. La synchronisation des blocs sont par objet structures de données allouées pour le stockage des informations de synchronisation. La synchronisation des blocs de tenir la faiblesse des références à des objets gérés et doivent être analysés par le Garbage Collector. La synchronisation des blocs ne sont pas limités à stocker des informations de synchronisation et peut également stocker des COM interop métadonnées. Ce compteur a été conçu pour indiquer des problèmes de performances avec une forte utilisation des primitives de synchronisation.
La synchronisation nombre de bloc ne semble pas réinitialisés lorsque nous basculer vers une autre application si. Qu'est-ce exactement les causes de ces pour obtenir créé, et il y a des astuces pour réduire le nombre de ces?
(BTW, c'est vraiment orthographié "évier bloc" dans la liste des compteurs de performance. Je ne sais pas si ses une faute de frappe ou une plomberie blague)
- Mieux les appeler synchronisation des blocs, certainement dans le titre.
Vous devez vous connecter pour publier un commentaire.
Chaque fois que vous utilisez un système de blocage de primitives telles que
lock
ouMonitor.Enter
dans le .NET plate-forme, une synchronisation bloc d'initialisation de la structure contre l'instance de l'objet à être verrouillé. Comme indiqué dans la définition, ces blocs peuvent contenir plus d'information tels que le hachage de l'objet du code et COM interop de l'information.Depuis ces blocs sont limitées à ce qui peut être stockée, l'accès aux blocs simultanément peut provoquer une contention qui provoque à son tour l'objet de l'en-tête contenu de devenir un index dans une table de l'ensemble du système de synchronisation des blocs géré par le CLR. Le CLR est en mesure de recycler ces de synchronisation de bloc comme et quand ont besoin.
De verrouillage sur un objet toujours encourt CPU de tourner avant de le en attente sur un noyau du système d'objet. Chaque fois que la répartition de la CPU de spin n'est pas satisfaits pour permettre à un moniteur pour acquérir la section critique lock, un système de réinitialisation automatique poignée d'événement sera créé et une référence à il sera mis dans la synchronisation de bloc. D'autres threads en attente sur cette poignée d'événement sera ensuite bloquer sur l'événement de la poignée jusqu'à ce que le thread propriétaire a déclenché l'événement de la poignée de libération.
Donc, si ce compteur augmente constamment, c'est un signe que trop de threads sont sur la contention d'un verrou sur un ou plusieurs objets et ces verrous ne pourrait être libérée.