2012-01-16 7 views
3

私はオブジェクトのサイズ(シリアルの方法で多くのうちの1つ)を計算することによって、奇妙なメモリのトリックを実行しようとしています。メモリストリームを次のメモリストリームに転送します。どのようにCのオブジェクト(クラス、構造体)のサイズを取得する#

これは管理対象クラス用です。私はsizeofとMashal.SizeOfへの参照を見てきましたが、アンマネージ型や値型を参照していました。

だから誰でも実行時にこれを行う方法を知っているのですか?計算機を分解してコード内で手動で行うべきですか?あなたが好きなツールを使用することができますが、危険なコーディング(マーシャル)を使用していけない場合は、オブジェクトのサイズを取得カント

+2

何「メモリストリーム "あなたについて話している?オブジェクトのシリアル化された*サイズについて話しているなら、それはメモリのサイズとは非常に異なっている可能性があります。 –

+0

ファイルストリーム。私はzipファイルに含まれているXMLファイルを手動で解析するコードを書いています。物事をスピードアップし、時折のアイテムを解析するだけで済むので、オブジェクトのサイズをあらかじめ計算しておくことができます。例えば、私がこれらのオブジェクトを20個持っていて、最初と12番目のものだけが必要な場合は、私が目標に達するまで、行ごとに解析するのではなく、ジャンプを計算することによって、ある時間を言いたいと思います。 – user978122

+0

これは、マネージオブジェクトがどのようにMemoryStreamにシリアル化されるかによって異なります。シリアライゼーションコードを表示できますか? – Heinzi

答えて

5


CLRプロファイラ
VSTSプロファイラ
.NETメモリプロファイラ

+1

手作業での計算がやり遂げられるでしょう。 – user978122

+0

ポスターはメモリのものではなく、XMLデータストリームの話をしているとの回答はどうですか? – TomTom

+0

mekiciの答えは、CLRがサイズ見積もりを面白くしているので、C#のデータ構造体のサイズを取得しようとする価値はないということです。そのことを踏まえ、私は、少なくとも短期間のために、計算されたデータ構造のサイズを使用することを選択しました。私は、すべての集中的な目的のためにメモリのような並べ替えのように扱うことができるデータストリームを使用する何かをしようとしています。 – user978122

関連する問題