opened
bakurise
username_0
使用官方的静态文件服务器demo搭建了http server，下载大文件出现内存飙升并且不回收的情况。并且发现下载文件，会先把整个文件内容加载到内存（内存增长与文件大小相符）后才下发给客户端，而不是一边加载一边下发。

经实际测试发现gf的r.Response.ServeFile函数是问题所在，调用此函数后会先将整个文件读取到内存中然后下发，并且内存不会释放，连续下载多次大文件（测试样例为2G的rar文件）后内存100%溢出。

同比测试了golang官方的net/http库，

`
func downfileCallback(w http.ResponseWriter, r *http.Request) {
	path := getParam(r, "path")
	if !gfile.IsFile(path) {
		fmt.Println(path + " is not file.")
		return
	}

	http.ServeFile(w, r, path)
}

http.HandleFunc("/down", downfileCallback)

`

不会出现内存飙升和不释放的问题，一切正常使用。
文件下载内存飙升的问题
issue
created
johngcn
username_1
@username_0 原因是文件下载时使用的是`gf`自封装的带缓存功能的`writer`对象，已修复，等待下一个修复版本一同发布。
comment
closed
johngcn
username_1
issue
created
johngcn
username_1
@username_0 请更新最新框架代码再试。
comment