C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: DataGridViewの再読み込み


(過去ログ 120 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■72150 / inTopicNo.1)  DataGridViewの再読み込み
  
□投稿者/ ぽっち (1回)-(2014/05/21(Wed) 15:16:48)

分類:[.NET 全般] 

お世話になります。
win7でVB2008を使用しています。

たとえば AAA.csv を DataGridView で読み込み BBB.csv を新たに読み込ませるとします。
AAA.csv と BBB.csv は同じデータ量(項目数も行数も)でも BBB.csv の読み込みのほうが遅いです。

Dim csvRead As New StreamReader(csvGetFileName, System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim lin As String = csvRead.ReadLine()
Do
 If lin Is Nothing = False Then
  Dim Spt() As String = Split(lin, ",")
  AddEntry = UBound(Spt) + 1
  DataGridView.ColumnCount = AddEntry
  For iRead = 0 To AddEntry - 1
   DataGridView.Columns(iRead).Name = csvItems(iRead).Replace("""", "")
  Next
 End If
Loop While lin Is Nothing = False

こんなかんじでDataGridViewを作ってるのですのが
もっと良い方法や参考になるサイトがあれば教えていただきたいと思います。

引用返信 編集キー/
■72151 / inTopicNo.2)  Re[1]: DataGridViewの再読み込み
□投稿者/ WebSurfer (262回)-(2014/05/21(Wed) 15:34:23)
No72150 (ぽっち さん) に返信

何が問題かよく分かりませんが、もし、「BBB.csv の読み込みのほうが遅い」から、
AAA.csv と同等になるようにコードの改善点を知りたいということですと、今提示
されている情報では回答は難しいです。

とりあえず CSV パーサーを試してみてはいかがですか?

CSV パーサー
http://surferonwww.info/BlogEngine/post/2010/10/28/CSV-parser.aspx

上のページで紹介した A Fast CSV Reader は解析のスピードの速さがウリのよう
です。
引用返信 編集キー/
■72153 / inTopicNo.3)  Re[2]: DataGridViewの再読み込み
□投稿者/ ぽっち (2回)-(2014/05/21(Wed) 15:56:36)

> 何が問題かよく分かりませんが、もし、「BBB.csv の読み込みのほうが遅い」から、

すいません。。。
どう改善したいかを記載忘れました。

BBB.csv を再読み込みするときも AAA.csv を読み込んだ時のように早くしたいということです。

ちなみにMainフォームではそういった状態ですが別のサブフォームでは
サブフォーム.Close() → サブフォーム.Show() → CSV読み込み
と繰り返しやると常に早く読み込めました。

引用返信 編集キー/
■72154 / inTopicNo.4)  Re[1]: DataGridViewの再読み込み
□投稿者/ 魔界の仮面弁士 (13回)-(2014/05/21(Wed) 16:28:25)
2014/05/21(Wed) 16:28:42 編集(投稿者)

No72150 (ぽっち さん) に返信
> たとえば AAA.csv を DataGridView で読み込み BBB.csv を新たに読み込ませるとします。
提示いただいたコードでは、DataGridView の列名を設定しているだけであって、
DataGridView にデータを表示させるためのコードは含まれていないように見えます。


> AAA.csv と BBB.csv は同じデータ量(項目数も行数も)でも BBB.csv の読み込みのほうが遅いです。
それぞれ、何行何列何バイトのデータで、それぞれ、どの程度の時間差が生じているのでしょうか?
極端に差がある場合は、HDD の論理破損によるリトライが発生している可能性も考えられます。


また、AAA.csv → BBB.csv の順で読み込んだときと、
逆に、BBB.csv → AAA.csv の順で読み込んだときとでは、
常に BBB.csv の方が遅いのでしょうか?


> こんなかんじでDataGridViewを作ってるのですのが
提示されたコードは、下記のような構造になっていますね。

Dim lin As String = 行データ
Do
 If (lin IsNot Nothing) Then
  '''
  '''ここで lin を読み取っているが、lin を書き換えてはいない
  '''
 End If
Loop While (lin IsNot Nothing)


これを見る限り、Do〜Loop は不要で、Ifブロックだけで良いように思うのですが、
この繰り返し処理は、どういった意図で記述されているのでしょうか。
実際のループ内には、掲示板に記載されていないコードが含まれていたりはしませんか?



> もっと良い方法や
本題からは外れますが:

列名を割り当てるコードが
 For iRead = 0 To AddEntry - 1
  DataGridView.Columns(iRead).Name = csvItems(iRead).Replace("""", "")
 Next
となっていますね。

仮に csvItems() が 10 要素(0〜9)あるとしたら、
AddEntry は 10 以下である必要があることになります。

しかし提示されたコードでは、AddEntry の数を決めているのは
当の csvItems ではなく、先頭行データ lin の "," の数です。

Spt(iRead) であればまだ分かりますが、ここで使用されている
csvItems(iRead) とは、一体何者なのでしょうか。
引用返信 編集キー/
■72183 / inTopicNo.5)  Re[2]: DataGridViewの再読み込み
□投稿者/ ぽっち (3回)-(2014/05/23(Fri) 11:41:16)
lin = csvRead.ReadLine()
の記載もわすれちゃいました。。。

Dim lin As String = 行データ
Do
 lin = csvRead.ReadLine() ←ここに入ってます。
 If (lin IsNot Nothing) Then
  '''
  '''
 End If
Loop While (lin IsNot Nothing)


>また、AAA.csv → BBB.csv の順で読み込んだときと、
>逆に、BBB.csv → AAA.csv の順で読み込んだときとでは、
>常に BBB.csv の方が遅いのでしょうか?
いえ、二回目に読み込むほうが常に遅くて
AAA→BBB ならBBBが遅く
BBB→AAA ならAAAのほうが読み込みが遅い状態です。
AAA→AAA と読み込んでも二回目のAAAが遅いです。


>それぞれ、何行何列何バイトのデータで、それぞれ、どの程度の時間差が生じているのでしょうか?
読み込むデータはそのときによって違うのですが 28列 500〜800行 などです。
たとえば AAA.csv というデータ( 28列 600行 )を読み込むときに
最初の一回目に読み込むと 5秒 で読み込めます。
つぎにいったんデータを削除
Do
 If DataGridObject.Columns.Count = 0 Then Exit Do
 DataGridObject.Columns.RemoveAt(0)
Loop
そして二回目に同じ AAA.csv を再度読み込むと 20秒 ほどかかってしまいます。
この二回目の読み込みも一回目同様に 5秒 くらいの速さで読み込みたいです。

引用返信 編集キー/
■72185 / inTopicNo.6)  Re[3]: DataGridViewの再読み込み
□投稿者/ WebSurfer (265回)-(2014/05/23(Fri) 12:47:33)
No72183 (ぽっち さん) に返信
> つぎにいったんデータを削除
> Do
>  If DataGridObject.Columns.Count = 0 Then Exit Do
>  DataGridObject.Columns.RemoveAt(0)
> Loop

DataGridObject とは何ですか? 今まで書いてなかったコードが後になってどんどん出てきますが
そういうところに問題があるのではないですか? そもそも読み込みのスピードは大差なくて、そ
ういう書いてないところで時間がかかっているとか。

そうだとすると回答者はエスパーではないのだから、原因が何かなんて分かりません。掲示板の反対
側にいて、掲示板に書いてあること以外は何も知りえない回答者に、どうすればご自分の状況や問題
を的確に理解してもらえ、的を得た回答がもらえるかをよく考えて、十分な情報提供してください。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -