xobotosのreputed performance gainsについて興味があるので、私はバイナリツリーbenchmark codeをチェックアウトしました。XobotOS:C#バイナリツリーベンチマークで構造体が使用されるのはなぜですか?
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;
}
私はここに構造体を使用する利点は次と前のポインタ以来、何であるか思ったんだけどそれでもクラスにカプセル化されています。
まあ、ものがある - 彼らは左と右のポインタを必要としないため、リーフ・ノードは、純粋な値型です。半分のノードが葉である典型的なバイナリツリーでは、オブジェクトの数が50%削減されます。それでも、掲載されているパフォーマンスの向上ははるかに大きいようです。
質問:これ以上はありますか?また
、私はC#でツリーノードをこのように定義すると考えていないので(感謝Xamarin!)データ構造は非自明な方法で構造体を使用して恩恵を受けることができ、他のどのような? (つまり、ビットオフトピックだと、オープンエンドにもかかわらず。)
あなたが言及したパフォーマンスの向上は何ですか? – leppie
コードを見ると、誰かがやっていることを本当に知らなくても(または少なくとも非常にばかげたやり方でそれをやって)、Cコードからコピーされたことは明らかです。 – leppie