J’ai un serveur web qui lira les fichiers binaires volumineux (plusieurs Mo) en tableaux d’octets. Le serveur pourrait être la lecture de plusieurs fichiers en même temps (demandes de page différents) donc je cherche la manière plus optimisée pour y parvenir sans imposer le CPU trop. Est le code ci-dessous assez bon ?
Réponses
Trop de publicités?Je pourrais faire valoir que la réponse ici est généralement « ne pas ». Sauf si vous avez absolument besoin de toutes les données à la fois, pensez à utiliser un `` -based API (ou une variante de lecteur / iterator). C’est particulièrement important lorsque vous avez plusieurs opérations en parallèle (comme le suggère la question) pour minimiser la charge du système et de maximiser le débit.
Par exemple, si vous diffusez des données à un appelant :
En fonction de la fréquence des opérations, la taille des fichiers et le nombre de fichiers que vous êtes en train de regarder, il y a d'autres problèmes de performance à prendre en considération. Une chose à retenir, c'est que chacun de vos tableaux d'octets sera publié à la merci du garbage collector. Si vous n'êtes pas la mise en cache aucun de données, vous pouvez créer beaucoup de déchets et de perdre la plupart de vos performances à l' % de Temps dans le GC. Si les morceaux sont plus gros que 85K, vous serez l'allocation pour les Objets Volumineux(LOH) qui nécessitera une collection de toutes les générations pour libérer de la place (ce est très cher, et sur un serveur d'arrêter tous de l'exécution en passe). En outre, si vous avez une tonne d'objets sur la liturgie des heures, vous pouvez vous retrouver avec LOH fragmentation (la liturgie des heures est jamais compactés) qui conduit à de mauvaises performances et de la mémoire des exceptions. Vous pouvez recycler le processus une fois que vous atteignez un certain point, mais je ne sais pas si c'est une bonne pratique.
Le point est, vous devriez considérer le cycle de vie complet de votre application avant de l'nécessairement juste la lecture de tous les octets en mémoire la façon la plus rapide possible, ou vous pourriez être de trading à court terme de la performance pour la performance globale.