这是一个例子。假设我想使用String.Split()
方法在多个分隔符上拆分字符串。这是我在C#中写的内容:
myString.Split(new [] { ',', ';', ':' }, StringSplitOptions.RemoveEmptyEntries)
现在,函数的实际参数是一个常量数组(即在编译/ JIT时间已知)值,并且每次在表达式求值时,此数组至少在语法上被分配。
在CLR中是否存在魔法(或优化,如果你不相信魔法),这将避免每次分配和初始化数组,或者每次执行此代码时是否真的构造了数组?我一般都会广泛地询问CLR,如果有这样的话,还要特别关注微软在.NET中的实现。
答案 0 :(得分:1)
不,每次都会分配数组。在平均情况下可能不是什么大问题,但很可能是在一个紧凑的循环中,或者经常被调用(比如在繁忙的服务器上等)。
总之,如果您在这里受苦,最好将典型的分隔符数组放在辅助类中,如下所示:
public static class SplitHelpers
{
public static readonly char[] Comma = { ',' };
public static readonly char[] Stuff = { ',', ':', ';' };
// etc.
}
然后在您的通话网站上使用这些:
myString.Split(SplitHelpers.Stuff, StringSplitOptions.RemoveEmptyEntries)
信用,在信用到期的情况下,Marc Gravell就此问题撰写了pretty good blog post。我建议你阅读更多细节。