"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je libérer efficacement de la mémoire après avoir traité des données en Go ?

Comment puis-je libérer efficacement de la mémoire après avoir traité des données en Go ?

Publié le 2024-12-22
Parcourir:599

How Can I Efficiently Release Memory After Processing Data in Go?

Demande de libération de mémoire dans Go

Question originale :

Comment la mémoire inutilisée, en particulier celle occupée par une variable , être libéré après avoir été traité ?

Description détaillée :

La fonction getURL télécharge les fichiers sous 20 Mo, stockant leur contenu dans une tranche d'octets nommée body. Bien que fonctionnel, cela accumule l'utilisation de la mémoire. L'objectif est de libérer cette mémoire une fois le corps traité.

Réponse complète :

Gestion de la mémoire dans Go :

Go libère automatiquement la mémoire inutilisée. Cependant, le déclenchement d'une version manuelle n'est généralement pas recommandé, car c'est le signe de problèmes potentiels de gestion de la mémoire.

Solutions alternatives :

Pour éviter une consommation inutile de mémoire, considérez ce qui suit approches :

  • Requêtes restreintes : Limiter les requêtes qui nécessitent une mémoire importante.
  • Mémoire Pooling : Allouez des tampons de mémoire réutilisables pour éviter les allocations fréquentes.
  • Utilisez io.Readers : Traitez les données directement à partir de io.Readers, plutôt que de les lire et de les stocker en mémoire.

Exemple avec io.Reader :

func processFile(r io.Reader) {
  // Perform data processing
}

func getURL(url string) error {
  resp, err := http.Get(url)
  if err != nil {
    return err
  }
  defer resp.Body.Close()
  
  processFile(resp.Body)
  return nil
}

En passant resp.Body directement à processFile, l'intégralité du contenu du fichier n'est pas stocké en mémoire, libérant des ressources après le traitement.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3