速度问题是个大问题啊
解决方案 »
- 如何让程序 安全删除 指定u盘 ??? 急!
- 大家帮忙解决一个Delphi在命令行的一个问题?
- 请问各位》: 怎样用SQL 查询 某个字段内容相同的记录。。。。。。。。。。。急。。。。
- 听说,得双星都得散分,那我也不能坏了规矩
- 怎样判断字段的数据类型?
- 关于EDIT控件的问题
- 为什么TEdit没有居中对齐啊,我要做一个居中对齐怎么做呢?
- 高分求解:用 Indy 的 FTP 控件下载文件时怎么做进度条?
- 字段类型是“真假”型的。在DBGRID中怎么才能显示汉字的“真,假”而不是“TRUE,FALSE”
- Delphi 6
- 我现在要做个窗体设计器,就是类似Delphi设计窗体一样.要在程序运行时能用鼠标移动控件的位置,改变控件的大小,现在我已经能够移动单个控件,现在想象Delphi一样能够一次选择多个控件并同时移动位置
- 写了个查询时间为什么不执行
vStrings: TStringList;
S: string;
I: Integer;
vTickCount: Longword;
begin
vStrings := TStringList.Create;
vStrings.Sorted := True; // 排序后我的机器是200毫秒如果不排序是1800毫秒
vTickCount := GetTickCount;
for I := 1 to 100000 do
begin
S := IntToStr(Random(100));
if vStrings.IndexOf(S) < 0 then
vStrings.Add(S);
end;
Caption := Format('Count:%d Time:%dMS', [
vStrings.Count, GetTickCount - vTickCount]);
vStrings.Free;
end;如果用hash会更快
abc
123 //这个得找出来
hhj
abc //这个得找出来
var
i,j,c:integer;
s:TStringList;
begin
s:=TStringLIst.Create;
s.CommaText:='123,abc,123,hhj,abc';
s.SaveToFile('C:\A.txt');//保存源数据。
c:=s.Count-1; //为提高效率,先保存记录总数。
for i:=0 to c do
for j:=i+1 to c do
if s.Strings[i]=s.Strings[j] then
s.Strings[j]:='*'+s.Strings[j];//作删除标记。
s.SaveToFile('C:\B.txt');
s.Free;
end;
123 //indexOf('123')的话,只能定位到这里,不能定位到下一个'123',
//所以无法判断'123'是否重复
abc
123 //这个得找出来
hhj
abc //这个得找出来
==============使用这样的方法:找到第一个'123',然后delete hash,再重新找下一个'123',
那么,delete hash的过程很漫长,跟8楼mwy654321的时间差不多。
var
ScHash:THashedStringlist;
Index,i,k,n:Integer;
vTickCount: Longword;
t_Object : TObject;
begin
ScHash:=THashedStringlist.Create;
for i := 10000 to 20000 do
begin
ScHash.AddObject(IntToStr(i) + '测试字符串',Pointer(i));
end;
vTickCount := GetTickCount;
K := ScHash.Count;
i := 1;
n := 0;
while(i<k) do
begin
Inc(n);
i := i + 4; //这句可以调节操作的次数,不加的话,操作10000次
Index:=ScHash.IndexOf(IntToStr(i+10000) + '测试字符串');
if Index<>-1 then
begin
t_Object:=ScHash.Objects[Index];
ScHash.Delete(Index); //去掉这一句的话,速度很快
Dec(k);
end;
end;
Self.Caption := Format('Count:%d Time:%dMS', [n, GetTickCount - vTickCount]);
ScHash.Free;
end;
t_Object:=ScHash.Objects[Index];是什么意思?好像去掉这句也没有影响吧?