0

Je souhaite me connecter à un service Windows qui s'exécutera toutes les heures. J'utilise Parallel.ForEach dans mon service Windows. J'utilise AdoNetAppender pour me connecter à ma base de données sqlserver.Log4net dans le service Windows et Task Parallel Library

ILog _log = LogManager.GetLogger(typeof(EmailJob)); 

La ligne ci-dessus signifie, nous utilisons une instance statique pour se connecter à la base de données, n'est-ce pas? Comment la connexion est-elle maintenue dans AdoNetAppender? Lorsque mon service Windows complète la première itération et quel sera l'état de la connexion d'AdoNetAppender. Est-il proche à la fois ou en attente de l'élimination du garbage collector? et quand l'itération suivante commencera, ouvrira-t-il une nouvelle connexion?

Étant donné que mon service Windows s'exécute toujours, si le récupérateur de mémoire prend du temps pour disposer de l'objet, le nombre de connexions ouvertes dépassera la limite des connexions ouvertes maximum de SQL Server. Je dois fermer ma connexion lorsque l'itération se termine et ouvrir la connexion au démarrage de l'itération. Que faire?

+0

Un bon conseil pour poster ici est que même si cela peut être urgent pour vous, il n'est pas urgent pour quelqu'un d'autre. Veuillez lire [cette discussion de communauté] (http://meta.stackoverflow.com/q/326569/472495). – halfer

Répondre

1

La ligne de code dans votre échantillon n'est pas une variable de journal statique, vous vous demandez comment le GC recueillera votre variable. C'est seulement quand il n'y a plus de références à l'objet. En outre, vous faites beaucoup d'hypothèses sur le fonctionnement interne de l'AdoNetAppender. Votre connexion est conservée dans AdoNetAppender, mais elle utilise un tampon et n'écrit que lorsque le tampon est plein. La gestion des connexions est faite par le pilote que vous référencez dans votre chaîne de connexion, vous ne devriez pas vous inquiéter s'il est ouvert ou fermé. Normalement, vous ne devriez vous en préoccuper que lorsque vous avez un problème concret causé par l'enregistreur. Alors, quels symptômes voyez-vous ce point à l'enregistreur vous cause des problèmes?