原因是dll里有的参数变量没释放内存,举个例子:
extern "C" _declspec(dllexport) void aaa()
{
VideoCapture cap(0);
Mat frame;
cap>>frame;
imshow("aaa",frame);waitKey(1);
}
这个函数做成dll给C#调用就会有问题。首先是程序运行很慢,因为每执行VideoCapture cap(0);都会占用比较多时间;然后就是cap和frame变量没有释放内存,C#调用这个dll函数次数多后电脑内存占用会不断增多(可见360或毒霸等加速球)。解决办法是加上释放内存语句或使用静态存储方式,举个opencv的例子:
extern "C" _declspec(dllexport) void aaa()
{
VideoCapture cap(0);
Mat frame;
cap>>frame;
imshow("aaa",frame);waitKey(1);
cap.release();frame.release();
}
或
extern "C" _declspec(dllexport) void aaa()
{
static VideoCapture cap(0);
static Mat frame;
cap>>frame;
imshow("aaa",frame);waitKey(1);
}
又如语句
IplImage* pBinary = &IplImage(frame);
可在最后加上
delete pBinary;