gpt4 book ai didi

http - 释放未使用的内存?

转载 作者:IT王子 更新时间:2023-10-29 01:19:35 25 4
gpt4 key购买 nike

我正在使用以下函数下载小于 20MB 的文件。它将整个内容读取到内存中,因为另一个函数必须在字节上执行工作才能将其写入磁盘。

func getURL(url string) ([]byte, error) {
resp, err := http.Get(url)
if err != nil {
return nil, fmt.Errorf("getURL: %s", err)
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("getURL: %s", err)
}

return body, nil
}

这工作正常,但系统消耗了所有内存。

是否可以在 body 被另一个函数处理后释放它使用的内存,这样内存使用就不会大于当前正在处理的字节数?

最佳答案

首先我建议阅读以下问题/答案:

FreeOSMemory() in production

Golang - Cannot free memory once occupied by bytes.Buffer

你可以通过 runtime.GC() 触发 gc 来释放未使用的对象你可能会敦促你的 Go 运行时使用 debug.FreeOSMemory() 将内存释放回操作系统,但这一切都只是救火。一个编写良好的 Go 应用程序永远不必调用这些。

您应该做的是防止运行时必须分配大量内存。

您如何实现这一目标?一些方法(您甚至可以组合这些解决方案):

关于http - 释放未使用的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com