【发布时间】:2012-09-16 10:30:58
【问题描述】:
我正在用 C# 创建我的第一个网站。
我注意到我在智能感知中得到了一些重复的扩展方法。进一步调查是这两个:
public static void ThrowNullOrEmpty<T>(this IEnumerable<T> obj, string param)
{
}
public static void ThrowNullOrEmpty(this string obj, string param)
{
}
好像字符串也可以是IEnumerable<char>。
从编译的基础上,我可以删除字符串变体,但是否有任何性能问题或其他我应该注意的问题?
更新
刚刚测试了超过 100 万次迭代。
public bool IsNullOrEmpty1(string @this)
{
return String.IsNullOrEmpty(@this);
}
对
public bool IsNullOrEmpty2<T>(IEnumerable<T> @this)
{
return @this == null || !@this.Any();
}
IsNullOrEmpty1 在我的开发机器 IsNullOrEmpty2 (125 - 250ms) 上运行 12 毫秒,因此慢了 10 - 20 倍。
在现实世界中,我计算了每月 3000 万次迭代的极高数字,这相当于每分钟 1388 次(每天 12 小时)。结果两者都不到 1 毫秒。
因此,删除 IsNullOrEmpty1 不是最好的方法,但也不是网站杀手。
【问题讨论】:
-
据我所知,它是语法糖,编译器会为您的泛型生成一个新类型。在运行时,您应该不会注意到差异。
-
这么容易衡量,但除非有问题,否则何必费心呢?
标签: c# .net generics extension-methods