生成大量的随机字符串,代码已贴出,但我觉得不够高效!(200)

  • 主题发起人 主题发起人 32881
  • 开始时间 开始时间
3

32881

Unregistered / Unconfirmed
GUEST, unregistred user!
function RandomStr(Digit:Integer):string;var i: integer; s: string;begin s := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; for i := 1 to Digit do //根据长度来循环 begin Randomize;//每次都初始化随机种子 Result := Result + s[Random(Length(s)-1)+1]; end;end;procedure TForm1.Button1Click(Sender: TObject);begin RandomStr(1024*1024*10);//测试生成 10MB随机字符end;这段代码生成少的还行,但是,如果要生成 10MB 这么多的,需要几分钟。 如何能在尽可能短的时间内生成 10 - 100MB这样的随机字符呢?
 
Randomize;//只需调一次,放在FOR前面。
 
恩,我觉得不够高效是因为循环次数太多,应该从尽可能少循环甚至不循环来优化。
 
RandomStr(1024*1024*10);这个速度肯定慢,因为大字符串相加的时候(Result := Result + s[Random(Length(s)-1)+1];)特别浪费资源。你查找一下关于delphi的字符串处理方面的资料吧。你的函数帮你更改了下,RandomStr(1024*1024*10);的执行时间小于1秒了。function RandomStr(Digit:Integer):string;var i: integer; s: string;begin s := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; setLength(Result,Digit); Randomize; for i := 1 to Digit do //¸ù¾Ý³¤¶ÈÀ´Ñ­»· begin Result := s[Random(Length(s)-1)+1]; end;end;
 
感谢您的回答,问题解决了。
 
后退
顶部