写了一个程序,分别编译成 64位 跟 32位,发个图,大家看下运行时间 var str:string; time,i,total:Integer; begin time := GetTickCount; for I := 1 to 1000000 do begin str := str +'1'; end; time := GetTickCount - time; Memo1.Lines.Add(IntToStr(time) ); 附件有比较图片1
你真的确定C#效率高? var str:string; time,i,total:Integer; begin time := GetTickCount; for I := 1 to 1000000 do begin str := str +'1'; end; time := GetTickCount - time; Memo1.Lines.Add(IntToStr(time) );
end;
using System.Runtime.InteropServices; [DllImport("kernel32")] static extern uint GetTickCount();
private void button1_Click(object sender, EventArgs e) { string s = ""; uint time = GetTickCount(); for (int i = 0; i < 1000000; i++) { s = s + "1"; } time = GetTickCount() - time; textBox1.Text = textBox1.Text + "\n\r" + time.ToString();
} 我执行Delphi只要15ms,C#等了5分钟都没结果. 这种情况除非C#用StringBuilder会稍稍快一点. private void button1_Click(object sender, EventArgs e) { string s = ""; StringBuilder sb = new StringBuilder(); uint time = GetTickCount(); for (int i = 0; i < 1000000; i++) { sb.Append("1"); } s = sb.ToString(); time = GetTickCount() - time; textBox1.Text = textBox1.Text + "\n\r" + time.ToString();
} 这种情况也要31毫秒.慢于Delphi的15毫秒. 我用高版本Delphi也有StringBuilder. var str:string; sb : TStringBuilder; time,i,total:Integer; begin sb := TStringBuilder.Create; time := GetTickCount; for I := 1 to 1000000 do begin //str := str +'1'; sb.Append('l'); end; str := sb.ToString; time := GetTickCount - time; Memo1.Lines.Add(IntToStr(time) ); sb.Free; end; 结果是0毫秒.也就是小于一个线程轮询周期.至少10ms内就结束了.
1.据我测试,为啥c#64位编译出来跟32位运行速度差距很大,delphi 32跟64几乎没啥区别,不管是string相加,还是int类型的相加 2.我同样都用stringbuilder 测试下c#64位跟delphi64位,还是delphi落下风。。 3.我用一段加密解密的程序,循环10000次,测试下delphi 32 跟64,结果是用的时间64位的多。 正在纠结在64位系统用64位编译还是32位编译,求大神指点!!谢谢 for I := 1 to 10000 do begin str:= EncryptString('11111111221111111111','12345678'); str := UnEncryptString(str,'12345678'); end;
----------------------------------------------
-
如果是大量的添加字符,可以用这样的方法: var str:string; time,i,total:Integer; begin SetLength(str, 1000000); time := GetTickCount; for I := 1 to 1000000 do begin str[i] := '1'; end; time := GetTickCount - time; Memo1.Lines.Add(IntToStr(time) );