- PR -

VB.NETでエクスポート機能を付けたい

投稿者投稿内容
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-06-10 16:32
引用:

ヤマザキさんの書き込み (2004-06-10 16:17) より:
便乗になりますが、直接Writerへの方法というのは。。?
カンマつける処理をやりながら、直接Writerに書き出すという方法があるのでしょうか?
以前 str += hogehoge で処理してたら20秒弱もかかってたので、上記方法にしたのですが、
もっと効率の良い方法があれば、私も知りたいです。


あ、そんなたいしたもんでもなければ、特別なやり方があるという話でもないです。
先ほどのプログラムは、
StringBuilderに「全レコード内容」=「ファイルの内容全体」を作成した後、ファイルにまとめて書き出しを行っていましたが、これを例えば、一レコード作成毎にStreamWriter等に書き込む、あるいは、StringBuilderへのAddの代わりに、StreamWriterにWriteするというようなイメージです。

メモリ上にファイル全体を覚えておく必要があるなら別ですが、そうでない場合、巨大な文字列オブジェクトを作成するのは、リソース効率の観点であまりよろしくないという話です。
内部的には、StringBuilderのためのメモリ確保とコピーも結構な量行われていますよね?そうでなくとも、全ての内容をメモリ内に構築してしまう必要はないわけです。

[ メッセージ編集済み 編集者: なちゃ 編集日時 2004-06-10 16:54 ]
ヤマザキ
常連さん
会議室デビュー日: 2004/05/10
投稿数: 22
投稿日時: 2004-06-10 16:56
そうですね。

たしかにメモリ確保の問題の点から言えば、処理的に言うと「まとめて」というのも
難がありますね。

私としては、あまり巨大なファイルをVBで扱うつもりがなかったので、
20秒が1秒になるのは嬉しいですが、1時間が3分になっても、
スワップとかしまくるとかデメリットも大きくなるようなら、
Oracleの標準I/O使ったり違ったアプローチとりたいですね。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-06-10 16:59
NAL-6295です。

こんなんどうですかね。

コード:
        Dim writer As New IO.StreamWriter(IO.File.OpenWrite(ファイル名), System.Text.Encoding.GetEncoding("Shift_Jis"))
        Dim format As New System.Text.StringBuilder
        For intLoop As Integer = 0 To データテーブル.Columns.Count - 1
            format.Append("{")
            format.Append(intLoop)
            format.Append("}")
            If Not intLoop = データテーブル.Columns.Count - 1 Then
                format.Append(",")
            End If
        Next

        For Each row As DataRow In データテーブル.Rows
            writer.Write(format.ToString(), row.ItemArray())
            writer.Write(vbCrLf)
        Next
        writer.Close()


ふむふむ
会議室デビュー日: 2004/06/02
投稿数: 14
投稿日時: 2004-06-15 17:02
お疲れ様です。
ヤマザキさま、なちゃさま、NAL-6295さま、
ご教授ありがとうございます。
お礼のメールが遅くなり大変もうしわけありません。

急遽、別の作業が入り私がいまやっている作業が後回しに
なってしまいました。
今回教えていただいたエクスポート機能の方法等の確認は
1・2ヶ月先になりそうです。
沢山教えていただいたにもかかわらず、結果がまだ分からずで
申し訳ありません。

休日等に出来ればいいのですが、マシンが会社にしか無い為
また開始し次第、エクスポートについて出来たのか掲示板に載せます
沢山教えていただいたにも関わらずまた質問があるかもしれませんが、
よろしくお願いいたします。

本当にありがとうございました。

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