Eh bien, l'appel à Flush fait exactement ce qu'il dit. Les flux tamponneront les informations pour des raisons de performance; le plus souvent, il est plus facile d'obtenir des paquets plus gros d'octets, puis d'écrire cela sur la ressource sous-jacente (disque, réseau) que d'écrire à la ressource sous-jacente à chaque fois. Calling Flush fera en sorte que tout ce qui est tamponné soit écrit dans la ressource sous-jacente.
Si vous appelez ceci après chaque écriture, vous verrez probablement une diminution des performances, car vous faites beaucoup de petites écritures à ce que je suppose être le disque. L'avantage ici est qu'il est plus tolérant aux pannes. Si quelque chose se bloque, votre journal sera aussi à jour que possible.
Si vous n'appelez pas Flush après chaque écriture dans le journal, vous courez le risque de perdre certaines de ces informations en cas de défaillance.Maintenant, que le compromis soit nécessairement bon ou non, vous devez mesurer l'impact de l'appel de Flush soit tout le temps, ou à d'autres moments, et si oui ou non il répond à vos risques et besoins de performance.
Réduit pour informations incorrectes. Documentation - https://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush%28v=vs.110%29.aspx - indique qu'appeler explicitement Flush donnera de meilleures performances que l'utilisation d'AutoFlush . – yoyo
@yoyo Citation de votre référence: Lorsque AutoFlush est défini sur false, StreamWriter effectue une quantité limitée de mise en mémoire tampon, à la fois interne et potentiellement dans l'encodeur, à partir de l'encodage que vous avez transmis. il a l'habitude de SUCK CPU. – Behrooz
Salut @Behrooz - la phrase que vous avez citée est immédiatement suivie de "Vous pouvez obtenir de meilleures performances en définissant AutoFlush sur false", ce qui contredit directement votre affirmation selon laquelle "Il est toujours préférable d'utiliser AutoFlush, car il est optimisé et rapide." (Peut-être devriez-vous modifier votre réponse pour indiquer qu'elle ne s'applique qu'à une version antérieure de .NET?) – yoyo