Comment écrire dans un seul fichier avec plusieurs threads?
je suis de créer des fenêtres de l'application en C# à qui je veux écrire dans un fichier multiple avec plusieurs threads.Je suis l'obtention de données à partir de différents ports et il y a un fichier associé à chaque port.Est-il possible que la création de thread pour chaque port et d'utiliser le même fil encore et encore pour l'écriture des données de chaque fichier?
Supposons que je suis l'obtention de données de ports 10000,10001,10002 et il y a trois fichiers comme 10000.txt,10001.txt et 10002.txt. J'ai créer trois fils pour l'écriture des données de ces trois fichiers, respectivement, et je veux utiliser ces fils, encore et encore.Est-il possible?S'il vous plaît pouvez-vous donner un petit exemple de code si possible?
source d'informationauteur Dany
Vous devez vous connecter pour publier un commentaire.
Comme mentionné dans les commentaires, c'est chercher les ennuis.
Donc, vous avez besoin d'avoir un thread-safe classe writer:
C'est adapté pour être appelé par plusieurs threads. MAIS, il y a une mise en garde. Il peut y avoir un conflit de verrouillage. J'ai utilisé un
ReadWriterLockSlim
classe, parce que vous voudrez peut-être faire des verrous en lecture ainsi et de l'enfer, cette classe permet de mettre à niveau à partir d'un état de lecture aussi.Vous trouverez des réponses à d'autres messages sont un peu out-of-ligne avec votre question initiale - il semble que vous souhaitez écrire dans un fichier différent par thread.
La réponse est simple.. il suffit de le faire - le système de fichiers est thread-safe. Le seul hic peut-être la performance avec un seul disque. Simultanément et rapidement écrire de petits morceaux de données à de nombreux fichiers peuvent entraîner beaucoup de disque-volée que le système de fichiers tente de composer avec les distribué des fichiers/répertoires avec un seul rotor bras. Les disques durs modernes avec de grandes caches et intelligent contrôleurs d'atténuer dans une certaine mesure, mais vous pouvez avoir un problème. Essayez et vous verrez!
Vos problèmes sera augmenté si vous prévoyez de toujours créer et de détruire des threads, ouvrir et fermer des fichiers de données pour chaque réseau entrantes lire. Si vous pouvez éventuellement éviter cela, faites-le.
Si le disque ne peut pas suivre, vous pourriez mettre en œuvre certaines intelligent 'lazy-l'écriture de l'algorithme de votre choix pour augmenter la taille du disque écrit et de réduire ainsi le nombre, ou d'acheter un SSD, ou les deux.
O besoin de sérialiser les threads et de gérer la fermeture et l'ouverture de fichier d'appels. Et probablement ajouter utiliser au lieu de l'écrire.. Vous pouvez utiliser un gestionnaire de thread classe( plus comme le thread principal) pour aider la synchronisation de tous vos autres threads.
Bien que la meilleure chose serait probablement d'utiliser un thread dédié pour l'écriture de ce fichier..