以下是一个解析文本文件的代码片段,算法是直接从C#里面移植过来的,基本没变,但是执行效率C#中下降了70%左右,下面这个for循环会被N次调用,大家帮忙看看吧。
for (int k=0;k<slenggth;k++)
{
double t1=GetTickCount();//程序段开始前取得系统运行时间(ms)
ss=ReadFileString.GetAt(k);
if (ss!="." && ss!= "-" && ss!= "0" && ss!= "1" && ss!= "2" && ss!="3" && ss != "4" && ss!= "5" && ss != "6" && ss!= "7" && ss!= "8" && ss!= "9" && ss!= " ")
{
x2 = 0;
y2 = 0;
z2 = 0;
}
if (ss== "x" || ss =="X") //x X
{
x2 = 1;
y2 = 0;
z2 = 0;
}
if (ss=="y" || ss == "Y")//y Y
{
x2 = 0;
y2 = 1;
z2 = 0;
}
if (ss== "z"|| ss== "Z") //z Z
{
x2 = 0;
y2 = 0;
z2 = 1;
}
if (x2 == 1 && ss!= "x" && ss != "X" && ss!= " ")
{
xs = xs+ss;
}
if (y2 == 1 && ss!= "y" && ss != "Y" && ss!= " ")
{
ys = ys +ss;
}
if (z2 == 1 && ss!= "z" && ss != "Z" && ss!= " ")
{
zs = zs +ss;
}
double t2=GetTickCount();//程序段开始前取得系统运行时间(ms)
Version +=t2-t1;
}
for (int k=0;k<slenggth;k++)
{
double t1=GetTickCount();//程序段开始前取得系统运行时间(ms)
ss=ReadFileString.GetAt(k);
if (ss!="." && ss!= "-" && ss!= "0" && ss!= "1" && ss!= "2" && ss!="3" && ss != "4" && ss!= "5" && ss != "6" && ss!= "7" && ss!= "8" && ss!= "9" && ss!= " ")
{
x2 = 0;
y2 = 0;
z2 = 0;
}
if (ss== "x" || ss =="X") //x X
{
x2 = 1;
y2 = 0;
z2 = 0;
}
if (ss=="y" || ss == "Y")//y Y
{
x2 = 0;
y2 = 1;
z2 = 0;
}
if (ss== "z"|| ss== "Z") //z Z
{
x2 = 0;
y2 = 0;
z2 = 1;
}
if (x2 == 1 && ss!= "x" && ss != "X" && ss!= " ")
{
xs = xs+ss;
}
if (y2 == 1 && ss!= "y" && ss != "Y" && ss!= " ")
{
ys = ys +ss;
}
if (z2 == 1 && ss!= "z" && ss != "Z" && ss!= " ")
{
zs = zs +ss;
}
double t2=GetTickCount();//程序段开始前取得系统运行时间(ms)
Version +=t2-t1;
}
for (int k=0;k <slenggth;k++)
{
double t1=GetTickCount();//程序段开始前取得系统运行时间(ms)
char ss=ReadFileString.GetAt(k);
if (ss!='.' && ss!= '-' && ss > '9' && ss < '0' && ss!= ' ')
{
x2 = 0;
y2 = 0;
z2 = 0;
}
if (ss== 'x' || ss =='X') //x X
{
x2 = 1;
y2 = 0;
z2 = 0;
}
if (ss=='y' || ss == 'Y')//y Y
{
x2 = 0;
y2 = 1;
z2 = 0;
}
if (ss== 'z'|| ss== 'Z') //z Z
{
x2 = 0;
y2 = 0;
z2 = 1;
}
if (x2 == 1 && ss!= "x" && ss != "X" && ss!= " ")
{
xs = xs+ss;
}
if (y2 == 1 && ss!= "y" && ss != "Y" && ss!= " ")
{
ys = ys +ss;
}
if (z2 == 1 && ss!= "z" && ss != "Z" && ss!= " ")
{
zs = zs +ss;
}
double t2=GetTickCount();//程序段开始前取得系统运行时间(ms)
Version +=t2-t1;
}
C#可能会快一点了,预编器有很大的关系了。