6
votes

L'utilisation de fichiers_flag_no_buffering retournera un gain de vitesse notable?

Description détaillée récemment remarquée description de fichiers_flag_no_buffering Drapeau dans MSDN et lisez plusieurs résultats de la recherche Google sur les E / S débrouillés dans Windows.

http://msdn.microsoft.com/en-us/ Bibliothèque / AA363858 (v = vs.85) .aspx

Je me demande maintenant, est-il vraiment important d'envisager une option non approuvée dans la programmation d'E / S de fichier? Parce que de nombreux programmes utilisent l'ancien flux CLARE E / O ou C ++ iostream, je n'ai donné aucune attention au drapeau File_Flag_no_Buffering avant.

Disons que nous développons que nous développons un programme photo explorateur comme Picasa. Si nous mettons en œuvre des E / S non volés, la vignette peut-elle virer de la vitesse d'affichage Afficher la différence notable des utilisateurs ordinaires?


2 commentaires

+1 aux deux réponses, merci! J'ai testé le chargement de fichiers tampon et débordé avec un ancien projet d'explorateur de photos. Parce qu'il est lu que SEQUENTIAL SCENARIO Il n'y a pas de dramatique plus lent et ne peut pas également trouver une vitesse notable.


Je pense que cela peut être assuré que les fichiers d'E / S ignorés n'ont rien à voir avec les applications utilisateur finales :)


4 Réponses :


13
votes

Oh Seigneur no. Vous le rendez considérablement plus lentement en utilisant ce drapeau. Il contourne le cache du système de fichiers, ce magnifique code de code pouvant deviner avec une précision presque psychique que vous voudrez lire le secteur N + 1 après la lecture N. et il suffit de pré-charger s'il est bon marché.

Il est particulièrement mauvais pour l'écriture, c'est pourquoi l'option existe, vous n'obtenez pas l'écriture paresseuse. Ce qui signifie que votre programme ne peut fonctionner que aussi rapidement que le disque peut écrire. Ce qui est très, très lent. L'avantage du drapeau est que vous pouvez être sûr qu'il a été écrit. Aide à mettre en œuvre des mises à jour des disques transactionnelles, le type que les moteurs DBASE se soucient.

mais essayez ceci par vous-même pour voir l'effet.


0 commentaires

9
votes

Non, ce drapeau n'est pas destiné aux utilisateurs de disques typiques. C'est pour des programmes tels que des bases de données où ils doivent effectuer leur propre gestion de cache de fichier pour une performance optimale. Bien que je suis sûr que vous pourriez trouver des situations dans lesquelles il accélérerait votre programme, pour la plupart, vous voudriez utiliser le tampon fourni par le système d'exploitation - c'est pourquoi il est là.


4 commentaires

Je dois être en désaccord. Allez-y et copiez un fichier de 40 Go entre serveurs à l'aide de la mise en mémoire tampon fournie. Votre serveur sera à court de mémoire et de ramper. Très mauvais en production. Nous devons utiliser ce drapeau lors de l'adaptation de fichiers de bases de données importants entre serveurs.


@ Brain2000: Qu'est-ce que vous êtes en désaccord? J'ai dit: "C'est pour les programmes [que] besoin d'exécuter leur propre gestion de cache de fichiers pour une performance optimale" et vous avez fourni un exemple d'un tel programme. On dirait que tu es vraiment d'accord avec moi.


Si vous éteignez la mise en cache des chutes sous «Effectuer la gestion du cache de fichier propre», alors oui, je suis d'accord avec vous.


Le cache de fichier soufflant sur une copie à un seul fichier n'est vraiment pertinent qu'à Vista / 2008 (pas R2), qui avait une très mauvaise manipulation de cache. Chaque itération ultérieure le gère beaucoup plus intelligemment.



1
votes

J'ai récemment expérimenté cela. Puisque je faisais déjà ma propre gestion tampon (mise en œuvre d'une paire tampon, couramment utilisée dans les analyseurs), j'ai pensé que file_flag_no_buffering pourrait aider à éviter des copies supplémentaires. J'ai essayé différentes tailles de tampons (alignées sur une page), mais il était toujours plus lent que de ne pas utiliser le drapeau.

Depuis mon schéma impliquait la lecture du fichier entier une fois, dans l'ordre, j'ai essayé File_Flag_Seticential_Scan, et cela a réellement aidé un peu.

Lorsque vous désactivez la mise en mémoire tampon, vous n'obtenez pas l'avantage de la pré-extraction et des autres astuces de mise en cache des utilisations du système d'exploitation. Lorsque vous donnez le bon "indice", comme FILE_FLAG_SEINCE_SCAN, vous tirez le maximum de ces fonctionnalités du système d'exploitation.


0 commentaires

0
votes

Lecture de fichiers plus gros que la RAM de Fast SSDS peut bénéficier de cette option car le fichier ne s'intègre pas dans le cache de toute façon et IO direct empêche les frais généraux de battre constamment le cache. Cela signifie que si vous créez des milliers de vignettes pour une grande collection photo et vidéo, cela peut avoir un sens dans certains scénarios.


0 commentaires