Position actuelle: Accueil> Derniers articles> Comment définir la taille du tampon de Stream_Set_Write_Buffer dans PHP est le plus raisonnable? Partagez l'expérience pratique

Comment définir la taille du tampon de Stream_Set_Write_Buffer dans PHP est le plus raisonnable? Partagez l'expérience pratique

gitbox 2025-08-04

Qu'est-ce que Stream_Set_Write_Buffer ?

La fonction Stream_Set_Write_Buffer () vous permet de définir un tampon d'écriture pour le flux de fichiers pour améliorer l'efficacité de rédaction de fichiers. En écrivant d'abord des données dans le tampon, la réduction des opérations fréquentes d'E / S peut améliorer considérablement les performances, en particulier dans les scénarios où de grandes quantités d'écriture sont nécessaires.

Le prototype de fonction est le suivant:

 <span><span><span class="hljs-title function_ invoke__">stream_set_write_buffer</span></span><span>(resource </span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$buffer</span></span><span>)
</span></span>
  • $ Stream : Target File Stream Resource.

  • $ tampon : taille du tampon, unité en octets. Si 0 est passé, cela signifie que le tampon est désactivé (écrivez directement dans le fichier).

Base de réglage de la taille du tampon

1. La quantité de données écrites

Généralement, si vos données d'opération d'écriture sont relativement petites, vous pouvez choisir un tampon plus petit. Les grands tampons conduisent généralement à de meilleures performances pour de grandes quantités d'écrits de données.

Par exemple, lorsque vous écrivez moins de données par temps (comme des dizaines d'octets), la définition du tampon sur 0 ou une valeur plus petite peut être plus appropriée. Inversement, lorsque vous avez besoin de données par lots, l'augmentation du tampon vous empêchera de fréquentes opérations d'E / S de disque.

2. Mémoire et charge du système

La taille du tampon affectera l'utilisation de la mémoire. Dans le cas d'une mémoire limitée, il n'est pas recommandé de configurer un tampon surdimensionné, car cela peut entraîner une charge système excessive ou un débordement de mémoire. Par conséquent, l'ajustement modéré de la taille du tampon en fonction de la mémoire disponible du serveur peut aider à équilibrer les performances et l'utilisation de la mémoire.

3. Type de fichier et utilisation

Pour les scénarios où un fichier journal doit être écrit rapidement, un tampon plus petit est généralement utilisé. Étant donné que les fichiers journaux sont écrits un par un dans l'ordre chronologique, la définition de tampons trop importants peut entraîner des retards.

Pour les opérations telles que le traitement des fichiers importants et l'exportation de la base de données, il est recommandé d'utiliser un tampon plus grand pour réduire la fréquence des écritures de disque. Surtout lorsque vous traitez avec de grands fichiers texte, l'ajustement du tampon peut raisonnablement améliorer l'efficacité.

Comment déterminer une taille de tampon raisonnable?

  1. Par défaut: Si vous ne souhaitez pas le définir manuellement, vous pouvez compter sur le comportement du tampon par défaut de PHP. PHP sélectionnera automatiquement une valeur par défaut en fonction des performances d'E / S du système, ce qui est suffisant pour la plupart des scénarios.

  2. Débogage étape par étape: dans un environnement de développement réel, vous pouvez effectuer un réglage des performances via différentes tailles de tampon. Grâce à plusieurs expériences, différents volumes de données et charges de serveurs, l'impact de différents paramètres de tampon sur les performances peut être comparé, et enfin la meilleure valeur est sélectionnée.

  3. Recommandations courantes:

    • Pour l'écriture de fichiers, la taille du tampon généralement recommandée se situe entre 4KB et 64 Ko, ce qui convient à la plupart des scénarios.

    • Pour la rédaction du fichier journal, définissez un tampon plus petit ou ne définissez pas de tampon (0 octets).

    • Pour l'exportation de la base de données, le traitement des données par lots, etc., il est recommandé d'utiliser un tampon plus grand, généralement entre 1 Mo et 8 Mo, ce qui peut améliorer considérablement la vitesse de l'écriture par lots.

Exemple de code

Ce qui suit est un exemple courant montrant comment utiliser Stream_Set_Write_Buffer () dans PHP pour définir la taille du tampon d'un flux de fichiers.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Ouvrez un flux de fichiers</span></span><span>
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>);

</span><span><span class="hljs-comment">// Réglez la taille du tampon sur 8KB</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_set_write_buffer</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">8192</span></span><span>);

</span><span><span class="hljs-comment">// Écrire des données</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">"Ceci est un contenu de test\n"</span></span><span>);

</span><span><span class="hljs-comment">// Fermez le flux de fichiers</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans le code ci-dessus, nous définissons le tampon d'écriture du flux de fichiers sur 8KB, et cette valeur peut être ajustée en fonction de vos besoins réels.

Compétences de réglage

  • Monitor la mémoire via Memory_get_Usage () : Pendant les tests, l'utilisation de la mémoire peut être surveillée via la fonction Memory_get_Usage () pour éviter le débordement de la mémoire causé par le réglage des tampons trop grands.

  • Augmenter la concurrence des opérations d'écriture: dans certains cas, plusieurs opérations d'écriture peuvent être exécutées en parallèle, et l'efficacité d'écriture peut être encore améliorée avec des paramètres de tampon raisonnables.

  • Écriture asynchrone: Dans des scénarios de concurrence élevés, l'écriture asynchrone ou le traitement multithread / procédé peuvent être envisagés. PHP lui-même ne prend pas en charge le multi-threading, mais peut être implémenté via PTHEADS ou en combinaison avec l'extension PCNTL dans la CLI.

résumé

La définition raisonnable de la taille du tampon de Stream_Set_Write_Buffer () peut considérablement améliorer les performances de l'écriture de fichiers. Dans les applications pratiques, le choix de la taille de tampon appropriée doit être considéré de manière exhaustive en fonction de facteurs tels que la mémoire du système, la quantité de données d'écriture, le type de fichier, etc. Avec un réglage approprié, vous pouvez rendre le traitement de fichiers plus efficace tout en évitant les déchets de mémoire ou les écritures de disques fréquents.