
VB.netでのWindowsアプリケーション開発をしています。
String文字列の連結においてOutofMemory.Exceptionのエラーがスローされます。
手法としてはSingleの数値をカンマで区切り、1000個のカンマ区切り文字列を作成します。
その文字列は「temp_Str as String」の変数に格納していくのですが、
大型のループ処理で10万件以上作成されたところで上記のエラーが発生します。
(時間にして2~3時間程度経過した時点)
少なくとも数100万件の処理を行いたいのですが、
うまくメモリー管理をする方法はないでしょうか?
今現在GC.CollectやRemove等の処理は入れているのですが、あまり効果がありません。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
○今の具体的な方法は?
例えば
temp_Str &= 〜
temp_Str = temp_Str & 〜
などとやっているなら、StringBuilderで効率がよくなるかもしれません。
※ & で連結する場合、内部では「 旧文字列 & 連結する文字列」 という新しい文字列オブジェクトを作ります。
効率はよくはありません。
○本当に文字列が原因ですか?
例えば
For j = 1 To 数100万件
temp_Str =""
For i = 1 To 1000
データ処理
temp_Str &= "〜,"
Next
temp_Strの出力
Next
みたいな構造で、毎回temp_Strがクリアされているなら、文字列がメモリ不足の原因になるとは思えません。
この中の「データ処理」の方が原因だったりしませんか?
例えば、1回ループする度に、データ取得や計算用に作られたオブジェクトがGCされないまま残っている、とか。
あるいは「 temp_Strの出力」 の部分が「配列やListに追加」とか「TextBox1.Textに追加」とかだったら、ループ毎に使用メモリが増えていくことになります。
都度ファイルやデータベースに書き出すのがよいでしょう。
まずは、原因をちゃんと調べることです。
まずは、データ処理をばっさりコメントアウトして「 temp_Str にカンマ区切りの数値を連結」だけにしても発生するのか調べてみましょう。
VisualStudioにパフォーマンスツールが付いているなら、それを使うのも手です。
http://www.atmarkit.co.jp/fdotnet/chushin/vsperf …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
アクセスで特定の数字以外(複...
-
変数内に入った文字列の結合 UWSC
-
【Excel VBA】複数ある特定の文...
-
Excelで文字列内のある変化する...
-
.Net DLLのデコンパイルに詳し...
-
input prompt とは
-
文字列から数式に変換する標準...
-
テキストエディタで複数行にわ...
-
EXCELで文字列の特定の文...
-
エクセルでSQLでいうところの「...
-
VB6でprintfのようなこと
-
VBAでの Replace関数で、ワイル...
-
文字列のエスケープ処理
-
MFCのエディットボックスについて
-
複数文字列から共通文字列の抽...
-
VB.net で Webbrowserコントロ...
-
エクセルで文字列の最大値を抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
【Excel VBA】複数ある特定の文...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
Excelで指数表現しないようにす...
-
エクセル 数値データを桁をそ...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
MS SQLServer のSQLで文字列の...
-
Msgboxの×が押されたとき
-
ORCLEでの小数の表示方法の変更...
-
textboxユーザーコントロールの...
-
VBの「As String * 128」とは?
-
Pro c/c++ でホスト変数の後に....
-
変数内に入った文字列の結合 UWSC
おすすめ情報