【发布时间】:2013-06-01 21:42:48
【问题描述】:
我是 D 的新手。
我用http://arsdnet.net/web.d/cgi.d.html写了一个简单的文件服务器
我像这样发送一个文件(大小约为 xxMB):
import std.file;
void SendFile(string request)
{
auto bytes = read(request);
cgi_.setResponseContentType("application/zip");
cgi_.write(bytes);
bytes = null;
}
它可以很好地发送文件,但似乎没有被垃圾收集。 所以在发送一些文件后,它无法分配内存来读取。
我错过了什么?有没有办法手动释放内存?
【问题讨论】:
-
您使用的是新版本的 cgi.d btw 吗? github.com/adamdruppe/…
-
代码中还有其他内容吗?至少新版本的 cgi.d 不存储对输出数据的引用,我认为 std.stdio 也不存储。使用“删除字节”也可能会有所帮助;而不是 bytes= null;
-
我正在使用新版本的 cgi.d。和“删除字节;”没有帮助。我想要一些 GUI,所以我将 version(embedded_httpd) 代码复制到我的主目录。但我不认为这会造成问题。
-
不,我认为不应该。我的猜测是有一些误报使 gc 认为在没有参考时仍然存在参考。你是编译 32 位还是 64 位?
-
最好不要一次读取整个文件,而是使用循环读取(byte[]),这样您就可以控制缓冲区的大小
标签: garbage-collection d