全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1644
推到 Plurk!
推到 Facebook!

疑似Variant變數造成記憶體使用量不斷增加

尚未結案
dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-06 18:30:50 IP:140.110.xxx.xxx 訂閱
各位大大,
小弟目前正在撰寫截取Lecroy示波器資料下來並做訊號分析的程式,
在接收資料時,透過Lecroy的ActiveX,並使用Variant 變數接收,
接收資料的程式碼如下:
[code cpp]
Variant MetaData;
String stmp = this->SendQuery("INSPECT? \"WAVE_ARRAY_1\"");
this->Count = stmp.Delete(1,stmp.Pos(":")).Delete(stmp.Length()-2,3).Trim().ToInt();
ActiveDSO->SetupWaveformTransfer(0,0,0); // (FirstPoint=0, AllPoints, AllSegments);
MetaData.Clear();
MetaData = ActiveDSO->GetScaledWaveform(Variant(this->ActiveChannelString), this->Count, 0);
this->DataCount = 0;
if(!MetaData.IsEmpty()) {
SafeArrayGetLBound(MetaData.parray, 1, &LowerBound);
SafeArrayGetUBound(MetaData.parray, 1, &UpperBound);
for(long idx=LowerBound; idx<=UpperBound; idx) {
SafeArrayGetElement(MetaData.parray, &idx, (void*) &tmp);
this->Data[this->DataCount ] = tmp;
}
MetaData.Clear();
return true;
}
[/code]
利用Variant接收由示波器送來的資料,並且把這些資料轉換成float array,這是這個接收資料函數所做的所有工作。但是小弟從Windows工作管理員中觀察,每一次執行這個函數時,記憶體的用量就會一直往上增加,一次大約增加40K的用量。
小弟深度懷疑這記憶體用量的增加是由Variant變數所產生的,但因為每次在開始接收與轉換結束之後,我都有做Clear的動作,覺得完全由Variant變數所造成,似乎又說不大過去,況且,這一段程式碼是在一個函數裡面,理論上,跳出這個函數時,記憶體就該會自動被釋放。但除了這個Variant變數之外,小弟也找不到其它的理由說明為什麼記憶體用量會呈現一個線性的增加。不知道各位大大是否有更為精闢的見解,又該如何解決這樣的問題,謝謝。
編輯記錄
dueseven 重新編輯於 2008-05-06 18:32:21, 註解 無‧
系統時間:2017-11-20 17:13:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!