gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:43:17 26 4
gpt4 key购买 nike

我只是在尝试 我已经为我的 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)
{

}
}
});
}
  1. 是否会优化嵌套的 for 循环,因为它们不这样做任何东西(CachedEnumerable 在循环之后从不使用)?

  2. 是否存在可以优化测试代码的任何(其他?)案例出去?

  3. 如果是这样,我如何确保测试代码真正运行?

最佳答案

它不会被优化掉,因为它看起来像更多的东西。该代码实际上更像是(改编自已接受的答案 here ):

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

// Other loop
}
}

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

所做的优化不应对您的代码产生任何逻辑影响。它只会删除那些没有效果或在正常情况下永远不会被调用的东西,等等。

关于c# - 可以优化掉的测试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com