c#-可以优化的测试代码

我正在尝试将进行比较,并且针对CachedEnumerable< T>编写了以下测试类:

[Test]
public void CanNestEnumerations()
{
    var SourceEnumerable = Enumerable.Range(0, 10).Select(i => (decimal)i);
    var CachedEnumerable = new CachedEnumerable<decimal>(SourceEnumerable);

    Assert.DoesNotThrow(() =>
        {
            foreach (var d in CachedEnumerable)
            {
                foreach (var d2 in CachedEnumerable)
                {

                }
            }
        });
}

>是否会优化嵌套的for循环,因为它们不会这样做
什么(循环后再也不会使用CachedEnumerable)?
>是否有其他情况可以优化测试代码
出来吗
>如果是这样,我如何确保测试代码实际运行?

解决方法:

它不会被优化,因为还有更多的事情在进行.该代码实际上更像(改编自已接受的答案here):

using (IEnumerator<Foo> iterator = CachedEnumerable.GetEnumerator())
{
    while (iterator.MoveNext())
    {
        var d = iterator.Current;

        // Other loop
    }
}

编译器不知道调用MoveNext / Current是否有副作用,因此必须调用它们.如果不使用d,则可能会优化分配.但是它仍然必须调用Current.另一个循环也是如此.

所做的优化不应对您的代码产生任何逻辑影响.它只会删除无效或在正常情况下永远不会被调用的内容.

上一篇:纪中集训-游戏


下一篇:Linux开发之存储设备通信