为什么我的应用程序会泄漏内存?如何避免内存泄漏?

Loï*_* G. 5 python memory-leaks opc

我正在编写OPC客户端,所以我使用Python OpenOPC库。

问题是每次我阅读OPC项目列表时,我的应用都会消耗内存。

例如,以下代码每次迭代消耗约100ko:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import OpenOPC
import time
import gc

gc.set_debug(gc.DEBUG_LEAK)

client = OpenOPC.client()
while True:
    client.connect('CODESYS.OPC.DA')
    dataList = client.list("PLC2.Application.GVL.*")
    res = client.read(dataList)
    client.close()
    print gc.collect()
    print gc.garbage

    time.sleep(2)
Run Code Online (Sandbox Code Playgroud)

然后垃圾收集器返回:

0
[]
Run Code Online (Sandbox Code Playgroud)

当我关闭应用程序时,内存被释放。

所以我不明白为什么我的应用程序会泄漏内存以及如何避免这种情况。

你有什么主意吗?谢谢

Loï*_* G. 3

通过使用 read() 函数的组参数找到了解决方案:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import OpenOPC

client = OpenOPC.client()
client.connect('CODESYS.OPC.DA')
tags = client.list("PLC2.Application.GVL.*")
while True:
    res = client.read(tags, group='MyGroup')
client.close()
Run Code Online (Sandbox Code Playgroud)