- PR -

String変数の最大格納文字数

投稿者投稿内容
ちびぐま
常連さん
会議室デビュー日: 2004/09/09
投稿数: 37
お住まい・勤務地: 横浜市
投稿日時: 2004-09-27 21:23
お世話になっております。

StringBuilder変数は最大格納サイズはがInt32.MaxValueであるとMSDNにありますが、String変数の最大格納サイズはどのくらいのないか教えて下さい。
現在、StringBuilder変数を使用して最大格納サイズを変更しなかったので、バッファオーバーになってしまいました。
StringBuilder変数の最大格納サイズを変更すればよいのか、もしくはStringBuilderではなくString変数に変更したほうがいいのか悩んでおります。
ほかになにかいい案があればご教授願います。
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2004-09-27 23:00
StringBuilderの最大サイズを超えるようなデータを処理しようとしているのですか?その場合、

2(Charのサイズ) * Int32.MaxValue = 約4GB

です。何を使おうがメモリ中でやろうとすると、現状物理的に難しいですし、32bitシステムではどっちにしろ難しいです。Streamを使いチョコチョコと処理するとか、工夫しなければだめです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-27 23:05
このあたりの話ですかねぇ?
引用:

StringBuilder クラス

実装時の注意: この実装の既定容量は 16 で、既定の最大容量は Int32.MaxValue です。

StringBuilder は、インスタンスの値が大きくなった場合に、文字を格納するために必要なより多くのメモリを割り当てることができます。それに応じて容量が調整されます。割り当てられたメモリの量が実装固有で、必要なメモリ量が最大容量より大きい場合は、 ArgumentOutOfRangeException がスローされます。

ちびぐま
常連さん
会議室デビュー日: 2004/09/09
投稿数: 37
お住まい・勤務地: 横浜市
投稿日時: 2004-09-28 14:28
ご返信ありがとうございます。
StringBuilderを既定容量の16で使用していたためエラーが発生してしまいました。
DBに格納されている複数のデータをファイルに書き出す処理をしていて、DBのデータをStringBuilderに突っ込んで、一気にファイルに書き出そうとしてました。
yaさんの言う通りStreamを使用することにします。
ありがとうございました。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-09-28 15:54
引用:

ちびぐまさんの書き込み (2004-09-28 14:28) より:

StringBuilderを既定容量の16で使用していたためエラーが発生してしまいました。



既定は16ですけど、これは勝手に倍々と増えていきます。
そのため、既定容量で使用していたからエラーがでた、というのも
おかしいように思います。
どこか別の原因なんじゃないですかね。

#エラーの内容も詳しくはわからないので、なんともいえないですが。
ちびぐま
常連さん
会議室デビュー日: 2004/09/09
投稿数: 37
お住まい・勤務地: 横浜市
投稿日時: 2004-09-28 16:38
Exceptionのエラーメッセージにはエラーパラメータ:repeatcount
と出力されていましたので、StringBuilderの容量オーバーだと思ったのですが。。。
このエラーメッセージに何か心当たりはありますか?
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-09-28 17:42
正確なエラーメッセージと、そのエラーが発生する周辺のプログラムぐらいは
提示されないと何ともいえないですね。
判断するための情報が少なすぎます。

[ メッセージ編集済み 編集者: 小野@どっとねっとふぁん 編集日時 2004-09-28 17:43 ]
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-09-28 18:12
こんにちは。

(素朴な疑問なのですが)
バッファオーバーであると思われた際に、変数に格納していたバイト数は
どのくらいだったのでしょう。。。?

スキルアップ/キャリアアップ(JOB@IT)