UniQuery := TUniQuery.Create(nil); try with UniQuery do begin Connection := UniConnection; Close;
if (CardID_Temp <> '') and (OBUID_Temp = '') then begin SQL.Text := 'SELECT CardType FROM PETCRegionBlackList WHERE CardID = ''' + CardID_Temp + ''''; Open(); if RecordCount > 0 then Result := FieldByName('CardType').AsVariant;
WriteLog('-ExistsBlackList-CardID_Temp-' + IntToStr(Result) + '-' + FloatToStr(GetTickCount - StartTime) + 'ms'); end else if (CardID_Temp = '') and (OBUID_Temp <> '') then begin SQL.Text := 'SELECT CardType FROM PETCRegionBlackList WHERE OBUID = ''' + OBUID_Temp + ''''; Open(); if RecordCount > 0 then Result := FieldByName('CardType').AsVariant;
WriteLog('-ExistsBlackList-OBUID_Temp-' + IntToStr(Result) + '-' + FloatToStr(GetTickCount - StartTime) + 'ms'); end else if (CardID_Temp <> '') and (OBUID_Temp <> '') then begin SQL.Text := 'SELECT CardType FROM PETCRegionBlackList WHERE CardID = ''' + CardID_Temp + ''' AND OBUID = ''' + OBUID_Temp + ''''; Open(); if RecordCount > 0 then Result := FieldByName('CardType').AsVariant;
if (GetTickCount - TotleTime) > 50 then WriteDebugLog(CostTime + 'Totle-' + FloatToStr(GetTickCount - TotleTime));
except on E: Exception do begin Result := -1; WriteErrorLog('-ExistsBlackList-' + E.Message); end; end; end;
运行这个方法必须在50ms以内。
我写了一个Demo来测试。
procedure TForm1.Button3Click(Sender: TObject); var Interval, Times, I, J: Integer; StartTime, ContinueTime: Double; ACardID, AResult: string;
function CreateRandomNum: string; var NumTemp: string; I, J: Integer; begin Result := ''; for I := 1 to 4 do begin NumTemp := IntToStr(Random(99999)); if Length(NumTemp) < 5 then for J := 1 to 5 - Length(NumTemp) do NumTemp := NumTemp + '0'; Result := Result + NumTemp; end; end;
begin Label4.Caption := ''; Randomize; Interval := StrToInt(Trim(Edit2.Text)); //暂时没用 Times := StrToInt(Trim(Edit3.Text)); //循环次数 for I := 0 to Times do begin ACardID := CreateRandomNum; //随机卡号 StartTime := GetTickCount; case RadioGroup1.ItemIndex of 0: AResult := IntToStr(ExistsBlackList(PAnsiChar(ACardID), '', 'all')); 1: AResult := IntToStr(ExistsBlackList('', PAnsiChar(ACardID), 'all')); end; ContinueTime := GetTickCount - StartTime; Memo1.Lines.Add(DateTimeToStr(Now) + ' 卡号:' + ACardID + ' 结果:' + AResult + ' 用时:' + FloatToStr(ContinueTime) + 'ms'); if ContinueTime > StrToFloat(Edit4.Text) then begin Memo2.Lines.Add(DateTimeToStr(Now) + '卡号:' + ACardID + ' 结果:' + AResult + ' 用时:' + FloatToStr(ContinueTime) + 'ms'); // Break; end; for J := 0 to 100000 do begin CreateRandomNum; end; // Sleep(StrToInt(Edit2.Text)); Application.ProcessMessages; Label4.Caption := IntToStr(I + 1); end; end;
procedure TForm1.Button3Click(Sender: TObject); var Interval, Times, I, J: Integer; StartTime, ContinueTime: Double; ACardID, AResult: string; DLL: Cardinal; PP: TExistsBlackList;
function CreateRandomNum: string; var NumTemp: string; I, J: Integer; begin Result := ''; for I := 1 to 4 do begin NumTemp := IntToStr(Random(99999)); if Length(NumTemp) < 5 then for J := 1 to 5 - Length(NumTemp) do NumTemp := NumTemp + '0'; Result := Result + NumTemp; end; end;
begin Label4.Caption := ''; Randomize;
DLL := LoadLibrary('CheckBlacklist.dll'); if DLL = 0 then Exit; try @PP := GetProcAddress(DLL, 'ExistsBlackList'); if @PP = nil then Exit;
Interval := StrToInt(Trim(Edit2.Text)); Times := StrToInt(Trim(Edit3.Text)); for I := 0 to Times do begin ACardID := CreateRandomNum; StartTime := GetTickCount; case RadioGroup1.ItemIndex of 0: AResult := IntToStr(PP(PAnsiChar(ACardID), '', 'all')); 1: AResult := IntToStr(PP('', PAnsiChar(ACardID), 'all')); end; ContinueTime := GetTickCount - StartTime; Memo1.Lines.Add(DateTimeToStr(Now) + ' 卡号:' + ACardID + ' 结果:' + AResult + ' 用时:' + FloatToStr(ContinueTime) + 'ms'); if ContinueTime > StrToFloat(Edit4.Text) then begin Memo2.Lines.Add(DateTimeToStr(Now) + '卡号:' + ACardID + ' 结果:' + AResult + ' 用时:' + FloatToStr(ContinueTime) + 'ms'); // Break; end; for J := 0 to 100000 do begin CreateRandomNum; end; // Sleep(StrToInt(Edit2.Text)); Application.ProcessMessages; Label4.Caption := IntToStr(I + 1); end; finally FreeLibrary(dll); end; end;