Jep*_*sen 8 c# performance nullable as-operator
考虑以下代码:
static void FillUsingAsNullable()
{
int?[] arr = new int?[1 << 24];
var sw = System.Diagnostics.Stopwatch.StartNew();
for (int i = 0; i < arr.Length; ++i)
arr[i] = GetObject() as int?;
Console.WriteLine("{0:N0}", sw.ElapsedTicks);
}
static void FillUsingOwnCode()
{
int?[] arr = new int?[1 << 24];
var sw = System.Diagnostics.Stopwatch.StartNew();
for (int i = 0; i < arr.Length; ++i)
{
object temporary = GetObject();
arr[i] = temporary is int ? (int?)temporary : null;
}
Console.WriteLine("{0:N0}", sw.ElapsedTicks);
}
static object GetObject()
{
//Uncomment only one:
//return new object();
//return 42;
//return null;
}
Run Code Online (Sandbox Code Playgroud)
据我所看到的,方法FillUsingAsNullable和FillUsingOwnCode应该是等价的.
但看起来"自己的代码"版本显然更快.
可以2选择编译"x86"或"x64",以及2编译"Debug"或"Release(optimizations)"的3选项,以及选择GetObject方法返回的内容.据我所知,在所有这些2*2*3 == 12情况下,"自己的代码"版本明显快于"as nullable"版本.
问题:是否as有Nullable<>不必要的缓慢,或者我在这里遗漏了一些东西(很有可能)?
相关主题:"as"和可空类型的性能惊喜.
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |