我正在使用 doopl.factory 在一个循环中解决多个线性程序。我注意到循环实例时性能下降。使用 memory_profiler 表明每次调用后内存都会增加,最终导致性能非常差。似乎doopl.factory.create_opl_model() 和opl.run() 以某种方式阻塞了未被opl.end() 清除的内存。我的分析正确吗?
我设置了一个简单的例子来演示这个问题。
import doopl.factory, os, psutil
from memory_profiler import profile
@profile
def main():
dat = 'data.dat'
mod = 'model.mod'
print('memory before doopl: ' + str(psutil.Process(os.getpid()).memory_info().rss / 100000000) + ' GB')
with doopl.factory.create_opl_model(model=mod, data=dat) as opl:
try:
opl.mute()
opl.run()
opl.end() **# EDIT:** this is just to explicitly demonstrate with memory_profiler that opl.end() does not free all memory.
except:
'error'
print('memory after doopl: ' + str(psutil.Process(os.getpid()).memory_info().rss / 100000000) + ' GB')
if __name__ == "__main__":
main()
data.dat 文件为空,model.mod 文件如下:
range X = 1..5;
dvar int+ y[X];
minimize sum(x in X) y[x];
subject to {
forall (x in X) {
y[x] <= 2;
};
};
用doopl求解模型后有什么方法可以完全清除内存吗?