2017-06-19 6 views
0

J'ai un programme qui utilise le multithreading (beaucoup de thread) et doit consigner les données de chaque thread. Il produit beaucoup de très petits échantillons de données mais le fait très rapidement. Mon intérêt pour les données est de consigner tous les échantillons de manière continue.effet de BufferSize

J'ai donc besoin d'enregistrer seulement quelques numéros qui se mettent à jour avec une fréquence élevée. Je voudrais ajouter les données à un seul fichier (plusieurs threads à un fichier).

Ce qui me demande si je fais usage de StreamWriter ea

const int BufferSize = 65536; // 64 Kilobytes 
StreamWriter sw = new StreamWriter("filename", true, Encoding.UTF8, BufferSize); 

Quel est l'effet de BUFFERSIze? Aucune donnée ne sera écrite jusqu'à ce que le tampon soit plein ou jusqu'à ce que l'auteur du flux soit vidé sur le disque? En ce qui concerne la conception du programme, je pourrais mettre la méthode de l'écrivain de flux dans chaque thread, ou créer un seul script au démarrage du programme (de sorte que les threads effectuent uniquement l'écriture d'ajout).

Pour moi la journalisation rapide est importante, et tout devrait être écrit sur le disque car je ne peux pas perdre des échantillons.Je dois être sûr que tout est écrit et non mis en file d'attente parce que le tampon n'est pas encore complet. de fournir ces données d'une façon continue pas jusqu'à ce qu'un bouton est touché. (ne peut pas stocker en mémoire)

+0

Vos exigences indiquent que vous ne voulez pas mettre en mémoire tampon. Donc, bien sûr, la taille du tampon n'a pas d'importance du tout. Définissez AutoFlush = true et c'est à peu près tout. –

Répondre

0

Vous pouvez définir la propriété AutoFlush pour aligner le tampon au flux après chaque appel à StreamWriter.Write()

Si vous appelez rapidement StreamWriter.Write(), vous pouvez appeler le Flush() au lieu de le forcer à vider le tampon dans le fichier.

+0

tant d'écritures continuellement eflash alors, merci je ne savais pas qu'il avait une telle option – user3800527