- - PR -
シリアライズのメモリ消費量について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-02-03 23:08
YOSHI.Hです。
DataSetに8,000件程度のデータを詰めて、BinaryFormatterでシリアライズ しています。 ところが、シリアライズ(下記サンプルコードのA箇所)時にDataSetが使用し ていると思われるメモリの約20倍程度のメモリが消費されています。約10MB のデータに対し、約200MBのメモリが消費されている様です。 実行時のメモリ消費を抑えたいのですが、下記の質問。 1.実際、シリアライズ時のメモリ消費量がこんなにあるのか? 2.回避するにはDataSetを分割するしかないのか? 3.MemoryStreamの使用方法が適切なのか?
| ||||
|
投稿日時: 2003-02-04 00:42
> 実行時のメモリ消費を抑えたいのですが、下記の質問。
> 1.実際、シリアライズ時のメモリ消費量がこんなにあるのか? > 2.回避するにはDataSetを分割するしかないのか? > 3.MemoryStreamの使用方法が適切なのか? なぜ、メモリにストアするMemoryStreamにシリアライズしたデータを書き出しているのでしょうか? いたずらにメモリ使用量を増やしているとしか思えませんが。 加えて、8000件(10MB)のデータをセットしたDataSetをシリアライズする必要性が本当にあるのかどうかも疑問です。 | ||||
|
投稿日時: 2003-02-04 08:30
>>ところが、シリアライズ(下記サンプルコードのA箇所)時にDataSetが使用し
>>ていると思われるメモリの約20倍程度のメモリが消費されています。約10MB >>のデータに対し、約200MBのメモリが消費されている様です。 バイナリをダンプしてみました?DataSetを「テキスト」にシリアル化すると、XMLになります。各行に、「どのテーブルの何行目」、列の各要素に「どの列」という情報が付加されています。テーブル名、列名に長い文字列を指定していると、この本来のデータではないデータが大きくなり、自然と消費量も大きくなります。同じことが起こっているのではないでしょうか。 DataSetは「固定した要素の入れ物ではない」、ということに留意してください。 | ||||
|
投稿日時: 2003-02-04 13:05
YOSHI.Hです。
返答ありがとうございます。 Jittaさん、「DataSetは「固定した要素の入れ物ではない」」、おっしゃる通 りですね。 二天さん、ご指摘の通りです。 全体の構成としてシンプルなつくりでは無いだけに方式を見直すことにしまし た。 | ||||
1
