26
2024
04

内存回收

aardio 会自动回收内存,偶尔看到内存短时间小幅上升是正常的,
一段时间后就会自动释放(这样效率更高一些)。


有些不是由 aardio 分配的资源,可在析构函数中释放。
例如 inet.http 构造函数中调用 table.gc(this,"close") 绑定了 close 函数作为析构函数。
 
aardio 中所有需要析构的对象基本都提供了必须的析构函数。
那么有些对象,例如 web.rest 的源码里为什么没有看到析构函数呢?
web.rest 调用的是 inet.http ,既然 inet.http 有析构函数,web.rest 当然就不需要了。


那么,为什么大量创建 inet.http,web.rest 发现内存在上升呢?


1、对象额外分配的资源并不由 aardio 分配或管理。
对于某些较重的对象,可以提前释放,例如 inet.http 可以主动调用 close 函数,
COM 对象可选调用 com.Release() 释放(非必须,可以不这么做)。
aardio 仍然会在一段时间后自动释放这些对象(并不是立即、随时释放,有延迟)。


2、在循环内部大量创建 inet.http (还不关闭)是不必要的。
inet.http 本就共享会话,在循环外部创建一个 inet.http 对象代码更少,占用内存更少。 


这些属于极端的特例,大多时候可以忽略。
不要因为遇到一次下雨,就每天出门都带伞。

相关文章

« 上一篇 51Tracking 快递接口 库
« 下一篇 编辑正在添加

评论列表:

1 楼.arder   2024-04-26 18:28:53  回复该评论 
没有评论
我顶 (0 我踩 (0 举报 (0回复
更多评论>>

发表评论:


◎欢迎参与讨论