以前在用VB做一个数据分析软件时,分析实测数据,并图形化显示。
基本步骤就是读取数据文件(二进制)、分析计算数据、绘制图形。软件写好了,但是一运行奇慢无比,大概需要10多秒时间。难以忍受。郁闷的是开始始终找不到问题所在。经过各个模块逐块分析,排除了文件读取、绘制图形这两个模块。运行耗时主要集中在了分析计算数据这里。
但是里面就是一些基本的数学运行,不可能这么慢呀。
后来无意中发现了代码中的非常多的Format函数,这个函数用来格式化数据,难道是这个函数作怪?后来我去掉程序中用到的所有Format函数。程序运行一下提高了很多,由原来的10多秒变成了2-3秒。真没想到简单的Format函数确遇到这样的问题。后来改进了程序,速度提升了。这件事算是完了。前几天我在写自己的程序时,无意中又主要到了我的程序用了很多的string.Format函数,这时我联想到了我以前遇到的事,不禁担心起它的效率来了。刚刚我简单地测试了下,结果真的发现这个函数多了也是非常耗时的。
测试代码如下:
string strTmp = "";
int nNum = 10000000;
Console.WriteLine("Begin: {0}", DateTime.Now);
for (int i = 0; i <= nNum; i++)
{
    strTmp = "aaa" + "bbb" + "ccc" + "ddd";
}
Console.WriteLine("End: {0}", DateTime.Now);
Console.WriteLine("");
Console.WriteLine("Begin: {0}", DateTime.Now);
for (int i = 0; i <= nNum; i++)
{
    strTmp = string.Format("{0}{1}{2}{3}", "aaa", "bbb", "ccc", "ddd");
}
Console.WriteLine("End: {0}", DateTime.Now);
测试结果如下:
Begin: 2005-6-6 13:13:57
End: 2005-6-6 13:13:57Begin: 2005-6-6 13:13:57
End: 2005-6-6 13:14:09可见采用string.Format连接字符串和采用简单的+来连接字符串,效率有很大的差异。虽然我个人喜欢用string.Format方式来连接字符串,尤其是在有多个变量、字符常量等要组合成字符串时,我觉得string.Format比较方便,比如:
string.Format("Script is:{0}, Run time is:{1}", script, nTime);
等这些情况用string.Format看起来要舒服些,但是经过我的测试,我得出的结论是能不能string.Format就不用,比如上面的就改为:
"Script is:" + script + ", Run time is:" + nTime.ToString();
只是这样写看起不舒服而已,呵呵。