哪个效率更高?

活着生活 2011-01-07 02:27:33
我要修改两个字段stateA、stateB的值,stateA只有"0"、"1"、"2"、"3"四个值,stateB只有"1"、"2"两个值。
字段stateA与stateB是相关联的,当stateA="1"时,stateB="0"或stateB="1";stateB="2"时,stateA="3"或stateA="4"。
现在我有两个思路,方法一:比较stateB与这四个值;方法二:把stateB转换成int类型然后做加减操作。请问哪个效率更高点?有什么办法可以查看比较这两中方法的效率?
方法一的代码:

protected void UpdateState(string stateA, string stateB)
{
if (stateA == "0")
{
stateA = "1";
SetLoBcodeState(stateB);
}
else
{
stateA = "0";
SetLoBcodeState(stateB);
}
}
protected string SetStateB(string state)
{
switch (state)
{
case "0":
return "2";
case "1":
return "3";
case "2":
return "0";
case "3":
return "1";
default:
return "Wrong State Value";
}
}

方法二的代码:

protected void UpdateState2(string stateA, string stateB)
{
if (stateA == "0")
{
stateA = "1";//此时stateB为"2"或"3"
stateB = (Convert.ToInt32(stateB) + 2).ToString();
}
else
{
stateA = "0";//此时stateB为"0"或"1"
stateB = (Convert.ToInt32(stateB) - 2).ToString();
}
}

...全文
229 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
活着生活 2011-01-07
  • 打赏
  • 举报
回复
我嘞个去!
傻了……byte是8位无符号整数,我给当成char了……想什么呢我……唉……
我就郁闷了,看来要好好休息休息了……
活着生活 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 winner213 的回复:]

如果是固定的0,1,2,3,LZ为什么不用byte类型而用string来表示它们呢?
[/Quote]
这个数据库是别人写好的,如果修改这两个字段的话,代码里会有许多地方需要修改……麻烦……
PS:数据库里定义的这两个字段的类型是varchar(1),这里用string来表示会有什么不妥的地方吗?
活着生活 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zhaojun1120 的回复:]

建议还是加个计时器~或者用压力测试运行那个类看下速度~
[/Quote]
刚刚做了个测试,每个方法计算10000000次,方法一用时 0.578秒,方法二用时 3.453秒……
做了几次测试,方法一都是只用0.5到0.6秒,而方法二用时都在3分钟之上……
看来是转换类型比较耗时啊……
winner213 2011-01-07
  • 打赏
  • 举报
回复
如果是固定的0,1,2,3,LZ为什么不用byte类型而用string来表示它们呢?
zhaojun1120 2011-01-07
  • 打赏
  • 举报
回复
建议还是加个计时器~或者用压力测试运行那个类看下速度~
活着生活 2011-01-07
  • 打赏
  • 举报
回复
字典类我倒是知道,其实我是想问“ Dictionary<string,Func<string,bool>> ruls=new Dictionary<string,Func<string,bool>>();
ruls.add("1",c=>c=="0"||c=="1");”是什么意思的……手一抖,少选中了一行……
主要是“c=>c=="0"||c=="1"”不明白…… 是lamada表达式?没玩过……我去搜搜看……
唉,VS被我玩崩溃了……呵呵……
s8975565 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 idonotknowwhatislife 的回复:]

引用 16 楼 wanghui0380 的回复:

这种问题,我们考虑的不是效率,而是规则的可配置性

不要依赖于你现在的条件,现在的条件实际上过于巧合了。依靠巧合编程,并且依靠巧合去优化,不是一个很好的习惯。

so,如果从规则配置的角度出发,一个比较正常的解法是

Dictionary<string,Func<string,bool>> ruls=new Dictionary……
[/Quote]

字典类,去看看帮助吧。。。
活着生活 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wanghui0380 的回复:]

这种问题,我们考虑的不是效率,而是规则的可配置性

不要依赖于你现在的条件,现在的条件实际上过于巧合了。依靠巧合编程,并且依靠巧合去优化,不是一个很好的习惯。

so,如果从规则配置的角度出发,一个比较正常的解法是

Dictionary<string,Func<string,bool>> ruls=new Dictionary<string,Func<string,bool……
[/Quote]
呃……貌似我的习惯很不好……总是想取点巧,省点事,结果最后还是要改来改去的费劲……
那个,wanghui0380(放歌)“Dictionary<string,Func<string,bool>> ruls=new Dictionary<string,Func<string,bool……”这个是什么?
wanghui0380 2011-01-07
  • 打赏
  • 举报
回复
巧合是一个不牢靠的基础,一旦基础垮了,就更别说你在这个基础上做的啥优化了
wanghui0380 2011-01-07
  • 打赏
  • 举报
回复
这种问题,我们考虑的不是效率,而是规则的可配置性

不要依赖于你现在的条件,现在的条件实际上过于巧合了。依靠巧合编程,并且依靠巧合去优化,不是一个很好的习惯。

so,如果从规则配置的角度出发,一个比较正常的解法是

Dictionary<string,Func<string,bool>> ruls=new Dictionary<string,Func<string,bool>>();
ruls.add("1",c=>c=="0"||c=="1");
jxc521523 2011-01-07
  • 打赏
  • 举报
回复
判断的效率高,强制转换类型比较消耗性能
活着生活 2011-01-07
  • 打赏
  • 举报
回复
。。。
图片为什么不显示……
活着生活 2011-01-07
  • 打赏
  • 举报
回复
活着生活 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

自己加个计时吧,获取代码执行时间
[/Quote]
这个……下面是测试的截图……两个方法所用的时间都小于1毫秒……
活着生活 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyq11 的回复:]

很少数据,不用考虑
[/Quote]
那要是很大的数据量呢?比如这个平时使用的不是太多,每天1W次,一两年之后要对数据库批量修改,可能到时数据库里有几百万条记录,那么这两者的差别呢?
呃,咱们先单纯的讨论讨论算法的事,先不考虑SQL。。。
wuyq11 2011-01-07
  • 打赏
  • 举报
回复
很少数据,不用考虑
活着生活 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 timzhufaith 的回复:]

数据量很大?
[/Quote]
这个……暂时不能确定,不过同时使用这个功能的人应该不会超过2W……
活着生活 2011-01-07
  • 打赏
  • 举报
回复
不好意思,贴过来的代码修改了一下,结果有个地方没注意到…… ==!

protected void UpdateState(string stateA, string stateB)
{
if (stateA == "0")
{
stateA = "1";
SetLoBcodeState(stateB);//这里应该是 SetStateB(stateB)
}
else
{
stateA = "0";
SetLoBcodeState(stateB);//这里应该是 SetStateB(stateB)
}
}
TimZhuFaith 2011-01-07
  • 打赏
  • 举报
回复
数据量很大?
静_心 2011-01-07
  • 打赏
  • 举报
回复
程序的效率,主要看时间复杂度,代码执行时间跟机器有关,利用这个看效率不太靠谱。
加载更多回复(4)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧