各位大神,小弟使用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
uj5u.com熱心網友回復:
很明顯這記憶體泄露是在你add方法里泄露的。由于下面每次算完,就把整個物件釋放所以你看不到記憶體增加很明顯,但是上面的,每次的計算都在增加記憶體,而你最后才釋放。所以你得看的是你寫的這個函式里面變數是不是區域宣告的多,然后沒有釋放記憶體。這是我的個人看法,不對的話好好討論哈,不喜勿噴,素質討論。uj5u.com熱心網友回復:
感謝回復,我的那個MATLAB的add函式如下,它是一個比較簡單的函式,這個里面是有哪些需要釋放的呀?主要是我之前用matlab的時候沒有釋放過物件,只是清空的時候用過clear,但是如果我在這里面clear了,c就沒有回傳值了。
function c=add(a,b)
c=2*a+b;
end
uj5u.com熱心網友回復:
呼叫MATLAB本身就很慢,這個暫時沒有辦法。Matlab每次計算都默認會將結果保存在記憶體中,既然不能在計算后clear,就在計算前clear。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/49606.html
標籤:VB.NET
