gpt4 book ai didi

c - Libpq 使用大量内存的简单示例

转载 作者:行者123 更新时间:2023-11-29 11:57:24 27 4
gpt4 key购买 nike

为什么下面的代码要用1.2GB的内存来执行?无论传递给 generate_series 的数量如何,我都希望内存使用量相对平稳,但它却在稳步增加。请 - 告诉我我做错了什么!

if (!PQsendQuery(conn, "select generate_series(1, 10000000)"))
exit(1);

int i, value;
while (res = PQgetResult(conn)) {
for (i = 0; i < PQntuples(res); i++) {
value = atoi(PQgetvalue(res, i, 0));
}
PQclear(res);
}

printf("%d\n", value);
PQfinish(conn);

我已将此示例的完整源代码放在 pastebin 上.

最佳答案

默认情况下,libpq 似乎缓冲了整个结果,而不是分块读取。

在 9.2 中有一种方法可以改变这种行为,参见 Single row mode .

我已经试过了,在 PQsendQuery() 之后直接添加对 PQsetSingleRowMode(conn) 的调用,将内存使用量降低到几 MB。问题解决了!

关于c - Libpq 使用大量内存的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15717351/

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