c# - XobotOS:为什么 C# 二叉树基准测试使用结构?

标签 c# mono benchmarking xobotos

reputed performance gains 感到好奇在 xobotos 中,我检查了二叉树 benchmark code .

binary tree node 的 Java 版本是:

private static class TreeNode
{
    private TreeNode left, right;
    private int item;
}

C# version是:

struct TreeNode
{
  class Next
  {
    public TreeNode left, right;
  }

  private Next next;
  private int item;
}

我想知道在这里使用结构的好处是什么,因为 Next 和 Previous 指针仍然封装在一个类中。

好吧,有一个 - 叶节点是纯值类型,因为它们不需要左右指针。在一半节点是叶子的典型二叉树中,这意味着对象数量减少了 50%。尽管如此,列出的性能提升似乎要大得多。

问题:还有更多吗?

此外,由于我不会想到在 C# 中以这种方式定义树节点(感谢 Xamarin!)还有哪些其他数据结构可以从以非显而易见的方式使用结构中获益? (尽管这有点离题并且是开放式的。)

最佳答案

我刚遇到这个奇怪的代码并有同样的问题。如果您更改代码以匹配 Java 版本,它的运行速度会稍微慢一些。我相信大多数“struct TreeNode”无论如何都会被装箱和分配,除了底行。但是,每个节点都会导致 2 次分配:盒装 TreeNode 和类 Next。分配节省很快就消失了。 IMO,这不是对 struct 的适当使用。

关于c# - XobotOS:为什么 C# 二叉树基准测试使用结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630409/

相关文章:

c# - 如何在 C# 中使字段仅调试?

c# - 如何使用 UIAutomation 获取鼠标和键盘事件

.net - MONO FTP 客户端错误 - 530 - 用户访问被拒绝

mono - 使用 Mono 创建计算机 ID

c# - WCF : Check the exchanged size

java - 如何用 Java 编写正确的微基准测试?

Python 配置文件的陷阱

c# - WPF 选择值,显示成员路径与列表框和组合框不一致

c# - 如何在具有多个分支的项目中管理迁移?

asp.net-mvc - 通过 webapp 文件设置 mod-mono 虚拟主机与 apache 站点配置有什么区别?