質問

私は現在取り組んでいるのは、ray-トレーサーのクライアントまで、フルのC#として趣味。監督-選手コメンワレンダリング速度によるクセレントカンパニー集団を目指すぎたから、c++実行して走るスポットに不具合が発生します。

のオブジェクトのシーンにx線トレーサーを描画しに保存されKdTree構造をツリーのノードに格納され、配列になります。最適化んに問題はないとしてふさわしい多くのツリーのノードでキャッシュする。これはノードを含むを指すポインタの左の子ノードのみです。その後、その暗黙的にその右の子以下の直後、左の配列になります。

のノードが構造体の中にツリーの建設もんの配列による静的メモリマネージャクラス。が、私がトラバースツリーで、仕事だけます。その時点で早めにレンダリング(約の各時間)、左の子のポインタのルートノードが指差にnullポインタです。私は最終的にはゴミcollecter移の構造体の配列することを、どのようにヒープ.

ったことがいくつかをピンのアドレスのメモリがないように対応したアプリケーションの寿命としています。の固定キーワードだけの助けになりそうな時に単一のメソッドの呼び出し、宣言する固定配列でなければできない単純なるタイプのノードをい分けるどれがいいですか?いい方法はありませんかんこるのは僕だけでも、ものの、C#と思うのです。

ちなみに、c++、おそらくりのための高性能プログラムという選択肢はないと思います。

役に立ちましたか?

解決

まず、使用している場合は、C#が正常にできない突然の取得にnullを参考により、ガベージコレクタへの移動もので、ガベージコレクターも更新すべての参照は必要ありませんが心配での移動ものです。

穴からのぞきながらもメモリがこの原因となりますの問題とを解決す.ひとつになることを防ぎまでは、ガベージコレクタからの成形メモリには、適切な影響が出る場合がありますの性能することができてうれしいです。

ひとついからであることを利用構造体がないとしてい希望です。C#に失敗したインラインで他のメソッドの呼び出しを伴う構造体で、もっ固定この最新のランタイムのベータ構造体を頻繁に思えます。

個人的には、私はC++の技をこのような一般的傾向にあるため、もはC#.して学ぶかに少;ができるその他のより微妙な性能向上のため;)

他のヒント

あな静的メモリマネージャの実してるのでしょうか?ない限り、誰にでも安全でない(P/呼び出し,安全でないコードの動きが見ていバグプログラム、なによりの行動のCLR.

第二に、ということは何ですか'のポインタ、関係構造いい意味で名づけられたとされる、安全でないKdTree*ポインター?んでいます。代わりに、指数の配列になります。以来ることを期待したいすべてのノードのためのシングルツリーに保存され、同じ配列にな別々の配列になります。単一指します。

最後に、本当に必要KdTree*ポイント、静的メモリマネージャに配置すべき大きなブロックを使用例Marshal.AllocHGlobal他ポメモリのソース;でもこの大型ブロックとしてKdTree配列(指数は、KdTree-C-スタイル) でsuballocateノードからこの配列に何を"無料"ポインタです。

だってリサイズはこの配列了し、管理状態の行き届いて更新する必要があるすべてのポインタ。

基本的に学ぶべきことは安全でないポインタ管理メモリな ない ミックス以外の固定ブロック、スタックフレームとの親和性(すなわちの機能を返しますが、固定行動をうながらおくつろぎいただけます。方法はありますので端子に任意のオブジェクト、配列、GCHandle.Alloc(yourArray,GCHandleType.埋込)でほぼ確実になる。

を取得します。顕答えの場合について説明していただけまからいた、ということがあります。

の場合 本当に いすで利用できますGCHandle.Alloc方法を指定することを指すポインタは止めることなく自動的に末に公表されたの範囲のように固定します。

しかし、その他の人が見てとることこれは圧力を加え、ガベージコレクタ.う作っ構造体を保持する枚のノードおよびその管理の配列NodePairsではなく、配列ノード?

ればならないかもしれませんたいて完全にポリスチャンクメモリを使う方が良いよ配分のメモリーから直接ポリシーのヒープより恒久的にピン止めの管理にヒープ(このヒープできるようになってしまうことを適切にコンパクト)。ワンションに簡単に行うことを利用する整理.AllocHGlobal方法です。

でも禁止のペアの配列の参照指標?

あな静的メモリマネージャの実してるのでしょうか?ない限り、誰にでも安全でない(P/呼び出し,安全でないコードの動きが見ていバグプログラム、なによりの行動のCLR.

たとえ安全でないポインタ.思う Marshal.AllocHGlobal, もと寿命を超える単一のメソッドの呼び出し.反射ことだけをインデックスが最適なソリューションを提供してい頂いていもって国を模倣し、c++のコードです。

ひとついからであることを利用構造体がないとしてい希望です。C#に失敗したインラインで他のメソッドの呼び出しを伴う構造体で、もっ固定すの最新実行時のベータ構造体を頻繁に思えます。

私はこの少んで固定されています。純3.5SP1;なっているのでしょうか?しだけ理解できたような気がしたとして、実行時のβ.実際、私もここの変更に占める割合の倍増私の描画を高速になります。現在、構造体は積極的に並改善し、その性能を大きくX86システム(X64た構造体での性能です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top