- PR -

DataTableへの初回Addにのみ時間がかかります

1
投稿者投稿内容
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2006-01-17 11:10
お世話さまです。

VB.NET2003+Windowsフォームでのお話です。

DataTableに追加したレコードをDataGridにバインド表示させて
いるのですが、なぜか初回レコードの追加(Add)時にのみ
結構な時間(平均3、4秒程度)かかってしまいます。

実際には15列ほどあるテーブルなのですが、話を簡略化
するために1列のレコードに置き換えたコードを下記に記します。

  Private dataSet1 As New DataSet("DS")
  Private dataTable1 As DataTable = dataSet1.Tables.Add("TBL")
  Private dataClumn1 As DataColumn = dataTable1.Columns.Add("TITLE")
  Private RecCtr As Integer
  Private Rec As New ArrayList

Private Sub Show_Grid()
    dataTable1.Clear()
    Dim i As Integer
    For i = 0 To Rec.Count - 1
      dataTable1.Rows.Add(New [Object]() {Rec(i)})
    Next
    dgdTest.SetDataBinding(dataSet1, dataTable1.TableName)
End Sub

グリッドにレコードを追加する度に、このShow_Grid関数が呼び出される
のですが、Debug.WriteLine(TimeOfDay)で上記コードのどこで時間
がかかっているのかを計測した結果、初回Addの箇所で3、4秒かかり、
2回目以降ではコンマ何秒で済んでいるのです。

で、更に不思議なのが、上記の追加ロジックを実装しているフォームAと
これと全く同じ追加ロジックを持ったフォームBがあり、
フォームAでレコードを1件追加した時には3、4秒かかるのですが
フォームBに画面遷移して1件目を追加した時には、同じ
ロジック構造にもかかわらず、コンマ何秒かで処理されてしまうのです。

つまり、このプロジェクトの実行時の初回レコードの追加時にのみ
時間がかかっている感じなのです。

尚、追加の前にテーブルをクリアしていますが、
Show_Grid関数はレコード1件追加する度に呼ばれますが、
追加するレコードは事前にRec配列に蓄えられ、
配列に蓄えた文字列の数だけForループで回しています。

以上、ご教示のほど宜しくお願い致します。
1

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