数组或迭代器 - 对于返回一个/两个元素的调用具有更好的性能特征(内存方面)

lig*_*gaz 5 .net c# garbage-collection

想象一下,我们有以下方法(伪C#):

static IEnumerable<T> Iterator<T>()
{
    switch (SomeCondition)
    {
        case CaseA:
            yield return default(T);
        case CaseB:
            yield return default(T);
            yield return default(T);
        case CaseC:
            yield return default(T);
        default:
            break;
    }
}

static IEnumerable<T> Array<T>()
{
    switch (SomeCondition)
    {
        case CaseA:
            return new[] { default(T) };
        case CaseB:
            return new[] { default(T), default(T) };
        case CaseC:
            return new[] { default(T) };
        default:
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们有很多类似这种方法的调用,那么哪一个会消耗更少的内存(以及更少的GC周期)?为了实现这种Enumerable.Once()场景,编写自己的Enumerable/Enumerator是否有意义?

Ben*_*igt 1

这一个比其他两个都快:

static T[] Array<T>()
{
    switch (SomeCondition)
    {
        case CaseA:
            return new[1];
        case CaseB:
            return new[2];
        case CaseC:
            return new[1];
        default:
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这确实没有多大关系。