0

多数のレコードを繰り返し処理し、それらのレコードのデータに基づいて状態情報を設定している状況にあります。このようなもの(実際のコードではなく、単純化したもの):

StateObject state;
ConcurrentQueue<Record> records;

while(!records.IsEmpty()) 
{
  //set state here based on the next record
}

したがって、より効率的/より良い練習になるでしょうか

{
  //set state here based on the next record
  Record r = records.next();
  state = r.state;
}

また

{
  //set state here based on the next record
  Record r = records.next();
  if(state != r.state)
    state = r.state;
}
4

3 に答える 3

2

それはあなたの記録の種類に完全に依存します。1 番目の方が優れている場合もあれば、2 番目の方が優れている場合もあります。

于 2012-07-26T12:46:18.340 に答える
0

テストは高価です。コードを次のように単純化しました。

int x = 5;

if (x == 5)
    x = 4;

x = 4;

逆アセンブルされたコードは次のとおりです。

                int x = 5;
00000036  mov         dword ptr [rsp+20h],5 

            if (x == 5)
0000003e  xor         eax,eax 
00000040  cmp         dword ptr [rsp+20h],5 
00000045  setne       al   
00000048  mov         dword ptr [rsp+28h],eax 
0000004c  movzx       eax,byte ptr [rsp+28h] 
00000051  mov         byte ptr [rsp+24h],al 
00000055  movzx       eax,byte ptr [rsp+24h] 
0000005a  test        eax,eax 
0000005c  jne         0000000000000066 
                x = 4;
0000005e  mov         dword ptr [rsp+20h],4 

            x = 4;
00000066  mov         dword ptr [rsp+20h],4 

そうは言っても、時期尚早の最適化は時間の無駄です。データベース呼び出しには 1 秒かかる場合があり、上記の呼び出しには .00000001 秒かかる場合があります。

最も単純なコードを作成し、後で最適化します。

于 2012-07-26T13:05:33.927 に答える
0

あなたが自分で言ったように、これは単純化です。実際の答えは、状況の詳細によって異なります。世界の反対側にあるデータベースを実行している可能性があります。その場合、更新には法外な費用がかかる可能性があります。または、状態変数が非常に複雑なタイプであり、比較にコストがかかる場合があります。

@harold がコメントで述べたように、「試してみてください」。コードのプロファイリングを行い、コストがかかるものとそうでないものをある程度理解してください。期待した結果にならない可能性があります。

于 2012-07-26T12:56:53.523 に答える