Ale*_*nin 6 .net c# performance
几天前,我查看了二叉树测试 @计算机语言基准游戏的C#实现,并且奇怪地惊讶:那里的树节点被描述为一个struct(TreeNode)引用一个class(Next),它有两个字段a TreeNode(strut)类型.这显然看起来很奇怪,所以我更新了这个代码以使用单个类(即〜class TreeNode { TreeNode Left, Right }).我的ItemCheck实施是:
public int ItemCheck()
{
if (ReferenceEquals(Left, null)) // Such a node is always a leaf in this test
return 1;
return 1 + Left.ItemCheck() + Right.ItemCheck();
}
Run Code Online (Sandbox Code Playgroud)
您可能会发现,它与原始实现非常相似.不过,这段代码的性能差了大约2.2倍!
有人可以解释为什么这种"优化"在.NET上有意义吗?我主要想了解这有什么其他含义 - 当然,如果它不仅仅是缺乏C#/ JIT编译器.
可以在这里找到相同代码的更易读的版本,只有一些小的性能改进:https://github.com/alexyakunin/BenchmarkGame-CSharp/blob/master/src/BinaryTrees/Program.cs
更新:我创建了一个额外的项目来对此进行基准测试: