vb.net调用MATLAB生成的com组件的内存问题

rabiboy 2020-04-14 10:23:13
各位大神,小弟使用matlab的函数(一个很简单的求和函数)生成了com组件,然后在vb.net中进行调用。在进行调用时,发现如果使用下面的方式内存会一直增加。ReleaseComObject返回的值n是0,表示应该已经释放完了,但是内存一直没有下降。
calculation_function1 = New add_com.jisuan '载入时初始化
For i = 1 To 1000
calculation_function1.add(1, c, i, 2)
TextBox1.Text = c
Next
n = Marshal.ReleaseComObject(calculation_function1)
但是我使用下面的方法时,内存一直很稳定。我的问题是同样是调用多次calculation_function1,初始化和释放的位置不同(比如我这两个例子)为什么会导致内存一个释放完成,一个释放未完成呢? 上面的程序,在循环外面进行初始化是我希望的,因为每次初始化com组件时速度比较慢,所以同样是进行完整的一次循环,计算速度上面明显要快。有什么办法修改代码即保证计算速度,同时内存又可以正确释放呢?先行谢过。
For i = 1 To 1000
calculation_function1 = New add_com.jisuan '载入时初始化
calculation_function1.add(1, c, i, 2)
TextBox1.Text = c
n = Marshal.ReleaseComObject(calculation_function1)
Next
...全文
227 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
irix2008 2020-04-18
  • 打赏
  • 举报
回复
调用MATLAB本身就很慢,这个暂时没有办法。Matlab每次计算都默认会将结果保存在内存中,既然不能在计算后clear,就在计算前clear。
rabiboy 2020-04-15
  • 打赏
  • 举报
回复
引用 1 楼 学医之人的程序之旅 的回复:
很明显这内存泄露是在你add方法里泄露的。由于下面每次算完,就把整个对象释放所以你看不到内存增加很明显,但是上面的,每次的计算都在增加内存,而你最后才释放。所以你得看的是你写的这个函数里面变量是不是局部声明的多,然后没有释放内存。这是我的个人看法,不对的话好好讨论哈,不喜勿喷,素质讨论。

感谢回复,我的那个MATLAB的add函数如下,它是一个比较简单的函数,这个里面是有哪些需要释放的呀?主要是我之前用matlab的时候没有释放过对象,只是清空的时候用过clear,但是如果我在这里面clear了,c就没有返回值了。
function c=add(a,b)
c=2*a+b;
end
面向医学编程 2020-04-14
  • 打赏
  • 举报
回复
很明显这内存泄露是在你add方法里泄露的。由于下面每次算完,就把整个对象释放所以你看不到内存增加很明显,但是上面的,每次的计算都在增加内存,而你最后才释放。所以你得看的是你写的这个函数里面变量是不是局部声明的多,然后没有释放内存。这是我的个人看法,不对的话好好讨论哈,不喜勿喷,素质讨论。

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧