Update 1 の導入により発生する問題

QC#8695: Optimization is ruined by the D7 update

問題の詳細
アップデート後、実行速度が低下する。
確認方法
Validation and Benchmark Tool を使用し、以下のコードを実行する。
function StrCopyJOH_PAS_a (Dest: PChar; const Source: PChar): PChar;
var
  Src, Dst : PByteArray;
  I : Integer;
begin
  Result := Dest;
  Src := PByteArray(Source);
  Dst := PByteArray(Dest);
  Dst[0] := Src[0];
  if Dst[0] = 0 then Exit;
  Dst[1] := Src[1];
  if Dst[1] = 0 then Exit;
  Dst[2] := Src[2];
  if Dst[2] = 0 then Exit;
  Dst[3] := Src[3];
  if Dst[3] = 0 then Exit;
  Dst[4] := Src[4];
  if Dst[4] = 0 then Exit;
  Dst[5] := Src[5];
  if Dst[5] = 0 then Exit;
  Dst[6] := Src[6];
  if Dst[6] = 0 then Exit;
  Dst[7] := Src[7];
  if Dst[7] = 0 then Exit;
  Inc(Integer(Src), 4);
  Inc(Integer(Dst), 4);
  repeat
    Inc(Integer(Src), 4);
    Inc(Integer(Dst), 4);
    if Src[0] = 0 then
      begin
        Dst[0] := Src[0];
        Exit;
      end;
    if Src[1] = 0 then
      begin
        PWord(Dst)^ := PWord(Src)^;
        Exit;
      end;
    if Src[2] = 0 then
      begin
        Dst[2] := Src[2];
        PWord(Dst)^ := PWord(Src)^;
        Exit;
      end;
    I := PInteger(Src)^;
    PInteger(Dst)^ := I;
    if I and $ff000000 = 0 then
      Exit;
    Inc(Integer(Src), 4);
    Inc(Integer(Dst), 4);
    if Src[0] = 0 then
      begin
        Dst[0] := Src[0];
        Exit;
      end;
    if Src[1] = 0 then
      begin
        PWord(Dst)^ := PWord(Src)^;
        Exit;
      end;
    if Src[2] = 0 then
      begin
        Dst[2] := Src[2];
        PWord(Dst)^ := PWord(Src)^;
        Exit;
      end;
    I := PInteger(Src)^;
    PInteger(Dst)^ := I;
    if I and $ff000000 = 0 then
      Exit;
  until False;
end;

対処法 (非公式)

アップデート前に dcc32.exe と dcc70.dll を保存するか、同ファイルをインストール CD からコピーし、アップデート後も使用する。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-07-21 (火) 16:12:39 (412d)