python 调用DLL的问题
调用DLL代码如下:---------------------------------------------------------------------------...
调用DLL代码如下:
----------------------------------------------------------------------------
#coding:utf-8
import ctypes
dll = ctypes.windll.LoadLibrary('getcode.dll' )
def localgetcode(pic):
try:
code = dll.local(pic,'yunfile.cds','hycsxs')
code = ctypes.string_at(code, -1)
if code=='get error' or code=='load error':
return ''
return code
except:
return ''
-------------------------------------------------------------------------
主程序启动20个线程去调用这段代码,时间长了主程序运行结束时经常会出现内存错误,这是怎么回事?运行的时间短的话就没有这个问题....(PS :上面的getcode.dll是我自己写的DLL这个会调用另外一个叫"AntiVC.dll")
求高人指教。。。。。。 展开
----------------------------------------------------------------------------
#coding:utf-8
import ctypes
dll = ctypes.windll.LoadLibrary('getcode.dll' )
def localgetcode(pic):
try:
code = dll.local(pic,'yunfile.cds','hycsxs')
code = ctypes.string_at(code, -1)
if code=='get error' or code=='load error':
return ''
return code
except:
return ''
-------------------------------------------------------------------------
主程序启动20个线程去调用这段代码,时间长了主程序运行结束时经常会出现内存错误,这是怎么回事?运行的时间短的话就没有这个问题....(PS :上面的getcode.dll是我自己写的DLL这个会调用另外一个叫"AntiVC.dll")
求高人指教。。。。。。 展开
展开全部
那就是有内存泄露。内存没有释放。原因可能是多种。一种是你的DLL或者是AntiVC出了错。另外一种是ctypes出错。其中返回的内容没有释放内存。也许只有10个字节,但是长期积累还是很可观。
如果解决这个问题,就是稳定的程序,怎么用都不会坏。
还有一个保守的办法。如果你调用DLL的频率不是特别快。比如每秒不超过2000次。那么你可以将这个功能封装在一个服务进程里。线程再通过接口去访问。该 服务进程即使内存溢出崩溃了。也会自动重新启动。这样你的20个线程基本上只需要重试几次,等服务进程重新启动完成后,就可以获得结果。基本不影响使用。操作系统也很安全。因为进程退出后,所有的遗留错误都会清空。
如果解决这个问题,就是稳定的程序,怎么用都不会坏。
还有一个保守的办法。如果你调用DLL的频率不是特别快。比如每秒不超过2000次。那么你可以将这个功能封装在一个服务进程里。线程再通过接口去访问。该 服务进程即使内存溢出崩溃了。也会自动重新启动。这样你的20个线程基本上只需要重试几次,等服务进程重新启动完成后,就可以获得结果。基本不影响使用。操作系统也很安全。因为进程退出后,所有的遗留错误都会清空。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询