1

次のコードがあります。

const int size=9;
mtype array[size];
array[0]...
array[0].Value=me->getRootInstance()->A();
array[0]...

...

array[3000]...
array[3000].Value=me->getRootInstance()->A3000();
array[3000]...

while(Logging::getLogging()){ 

   if(!areEqual(array[0].Value,me->getRootInstance()->A())){array[0].Value=me->getRootInstance()->A(); saveValue(array[0]);}
   ...
   if(!areEqual(array[3000].Value,me->getRootInstance()->A3000())){array[3000].Value=me->getRootInstance()->A3000(); saveValue(array[3000]);}

}
return 0;

構造体の配列は最初に初期化され、変更がないかチェックされます。変更が発生した場合、配列内の値を更新する必要があります。問題は、現在のコードが非常に遅いことです。100 ミリ秒ごとに変更が行われることがわかっています。小さな配列の場合は正常に機能します。それにもかかわらず、配列が大きい場合 (3000 要素)、更新時間の遅延は 3 秒を超えます。配列の要素を比較して更新するより良い方法はありますか?

areEqual 関数は次のようになります。return fabs(a - b) < 0.000000000001;

saveValues() は次のようになります。

OMGuard _omGuard(r_omGuard); 
int tc = clock()-Logging::getStarttime(); //clicks 
double seconds = ((double)tc)/CLOCKS_PER_SEC;   

mtype *newstruct = new mtype();   

newstruct->Calltime = seconds;
newstruct->Name = melem.Name;
newstruct->Value = melem.Value;   
newstruct->GUID = melem.GUID;  
newstruct->ReqName = melem.ReqName;
newstruct->ReqGUID = melem.ReqGUID;

monitoredlist.add(newstruct); 

助けてくれてありがとう!エドの挨拶

4

0 に答える 0