Quelle est la différence entre FileStream.Flush () et FileStream.Flush (True)?

MSDN indique que FileStream.Flush(True) “efface également tous les tampons de fichiers intermédiaires”.

Que signifie exactement “tous les tampons de fichiers intermédiaires”?

Les données de fichier mises en mémoire tampon dans le cache du système de fichiers sont écrites sur le disque. Ces données sont normalement écrites paresseusement, en fonction de la position de la tête d’écriture du disque. Il est techniquement possible de disposer d’un gigaoctet de données en cache, ce qui peut prendre un certain temps. Si cela est important pour vous, FileOptions.WriteThrough plutôt l’option FileOptions.WriteThrough . Il désactive complètement la mise en cache en écriture. Cela peut être très coûteux. vous découvrirez à quel point les disques durs sont lents.

Lorsque vous appelez Flush() ou Flush(false) , FileStream “copie dans le fichier toutes les données précédemment écrites dans la mémoire tampon et efface la mémoire tampon (à l’exception de l’état de son codeur)”. Buffer signifie ici le tampon interne de la classe FileStream . Et copier dans un fichier ne signifie pas écrire des données sur un disque. Il ne fait que transmettre des données à l’OS.

Toutefois, les opérations d’E / S sous Windows sont également mises en mémoire tampon: l’écriture de données sur le disque peut être différée jusqu’à ce que le système soit prêt à le faire. Ainsi, la suppression de tous les tampons intermédiaires impose l’écriture des données mises en tampon sur le disque. Tampons signifie ici tampons internes à Windows [Cache du système de fichiers].

BTW lorsque vous fermez le fichier, toutes les données en mémoire tampon seront automatiquement gravées sur le disque. Ainsi, vous n’avez besoin de ce matériel que si vous souhaitez que les données soient vidées avant que le descripteur de fichier ne soit fermé.

Cela fera un appel supplémentaire pour vider le tampon dans le fichier:

  Win32Native.FlushFileBuffers(this._handle);