gpt4 book ai didi

string - 如何管理大字符串

转载 作者:行者123 更新时间:2023-12-04 02:17:27 25 4
gpt4 key购买 nike

在最近对我的 ESP8266 的测试中,我遇到了内存限制。

我有一个简单的 http 服务器,它提供 ESP8266 周围可用的 AP 的 json。

function incoming_connection(conn, payload)
conn:send('HTTP/1.1 200 OK\n')
conn:send('Content-Type: application/json\n\n')
conn:send(tableToJson1(currentAPs))
end

当我在家时,在巴黎,AP 列表可能很长,然后我达到有效负载的最大大小。

为了避免这种内存困惑,我想将我的 json 分成几 block ,然后一个接一个地发送。

我是这样写的:

function splitString(str, maxlen)
local t = {}
for i=1, math.ceil(string.len(str)/maxlen) do
t[i] = string.sub(str, (i-1)*maxlen+1, i*maxlen)
end
collectgarbage()
return t
end

然后尝试用这个测试函数:

function genstr(len)
local s=""
for i=1,len do
s=s.."x"
end
return s
end
for k,v in pairs(splitString(genstr(2000))) do print(v) end

一些测试的结果:

Length of generated string    +   Length of string chunks   +   Result
1500 + 100 + OK
1500 + 200 + OK
2000 + 100 + Crashes after 8 lines
2000 + 200 + Crashes after 4 lines

我似乎达到了大约 1500 字节的内存限制。

如果超过这个限制,您有什么建议?

最佳答案

问题可能出在genstr,而不是splitString

Lua中的字符串是不可变的,在genstr中,循环中的每个s=s..."x"都会生成一个新的字符串。

  for i=1,len do
s=s.."x"
end

相反,您可以使用内置的 string.rep (或者,对于更复杂的情况,table.concat)生成测试字符串。

关于string - 如何管理大字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33079910/

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