作者erspicu (.)
看板C_Sharp
标题Re: [问题] string封装的效能问题
时间Sun Mar 17 20:03:20 2013
: string str = ((int)(x / (x + y) * 100)) + "%";
: 就是很单纯的没有加上.ToString()
: 前面的数字会被隐含转换成string,
: 依然可以做成要求的数字,这样写法的装箱次数又是几次?
既然你那麽好奇的话 就跟你说一个残酷的结果
测试执行1千万次 (注意喔 是1千万次...)
跑了好多次的数据测试
反来是你自已以为会快点的写法慢了一点点
cost : 1.272
cost : 1.334
老实说执着於benchmark的人比较容易发生於两种人身上
一种是新手
一种是因为某些问题不得不下去优化的人
说真的如果不是需要 真的不需要浪费时间在这方面
特别是C#有些特性很奇怪
有时候一些看起来很聪明的非通例写法反来会比较慢
笨写法反来快 真的很难说
另外更有趣的一点是 高阶层层的物件包装
也常常跟效能有所违背 看你是要程式良好的风格重要 优点好维护
还是把高阶物件化语言搞到像C那样 如果真的都要计较效能
乾脆换别的语言比较好 其实也不是任何程式都需要多高的效能
够用就好 我觉得
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace TESTCASE
{
class Program
{
static void Main(string[] args)
{
string str;
Stopwatch st = new Stopwatch();
st.Restart();
for(int i = 0 ; i<= 10000000 ; i++)
str = ((int)( i / (i + 100.0) * 100)).ToString() + "%";
st.Stop();
Console.WriteLine("cost : {0}", st.ElapsedMilliseconds / 1000.0 );
st.Restart();
for (int i = 0; i <= 10000000; i++)
str = ((int)(i / (i + 100.0) * 100)) + "%";
st.Stop();
Console.WriteLine("cost : {0}", st.ElapsedMilliseconds / 1000.0 );
Console.ReadKey();
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.70.79.227
2F:→ emn178:新手哪会注意效能 03/18 07:54
3F:推 stu87616:感谢亲自用实例测试 我..应该算新手@@ 03/18 11:35
4F:→ stu87616:只是会对这种东西好奇... 03/18 11:35