我敢肯定,每个人都遇到了喜欢这种ToString()
方法的开发人员。我们都可能看到了类似于以下内容的代码:
public static bool CompareIfAnyMatchesOrHasEmpty(List<string> list1, List<string> list2)
{
bool result = false;
foreach (string item1 in list1)
{
foreach (string item2 in list2)
{
if (item1.ToString() == item2.ToString())
{
result = true;
}
if (item1.ToString() == "")
{
result = true;
}
}
}
return result;
}
我想知道的是ToString()
,编译器是否可以优化该方法(空的,无格式的方法)?我的假设是它没有,因为它最初是在上定义的object
。因此,我提出了第二个问题,关于是否有必要进行清理此类实例的工作?
它肯定可以由编译器优化,但是他们可能没有,因为它是微不足道的。在确定是否值得进行任何优化之前,请先尝试进行一些测试。试试吧!
List<string> strings = Enumerable.Range(1, 10000000).Select(x => Guid.NewGuid().ToString()).ToList();
var sw= Stopwatch.StartNew();
foreach (var str in strings) {
if (!str.ToString().Equals(str.ToString())) {
throw new ApplicationException("The world is ending");
}
}
sw.Stop();
Console.WriteLine("Took: " + sw.Elapsed.TotalMilliseconds);
sw = Stopwatch.StartNew();
foreach (var str in strings) {
if (!str.Equals(str)) {
throw new ApplicationException("The world is ending");
}
}
sw.Stop();
Console.WriteLine("Took: " + sw.Elapsed.TotalMilliseconds);
好的,所以我们处于一个循环中,共有1000万个项目。与非tostring版本相比,tostring(称为两次)版本需要多长时间?
这是我在机器上得到的:
Took: 261.6189
Took: 231.2615
嗯是的。在1000万次迭代中,我节省了30毫秒的时间。所以...是的,我要说不,不值得。完全没有。
现在,是否应该因为愚蠢而更改代码?是的。我可以这样说:“这是不必要的,使我一眼就认为这不是字符串。这需要我动脑筋进行处理,实际上没有任何用处。不要这样做。” 不要从优化的角度争论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句