VB.NET Tips FlexGrid.NETを連結(バウンド)モードで使用するときのパフォーマンスの改善
GrapeCity社のFlexGrid.NETの連結(バウンド)モードを使用して大量にデータを表示するとき、5000件位のデータ連結だと、SetDataBinding時に処理時間が約2.3秒程度かかりました。
50000件処理するとき、単純計算で23秒。こうなると、使えません。
パフォーマンスを改善する策はないかと探したところ、
GrapeCity社のFlexGrid.NETの連結(バウンド)モードを使用して大量にデータを表示するとき、5000件位のデータ連結だと、SetDataBinding時に処理時間が約2.3秒程度かかりました。
50000件処理するとき、単純計算で23秒。こうなると、使えません。
パフォーマンスを改善する策はないかと探したところ、
FlexGrid.NETにDataBindされたDataTable内の任意行にDataRow(新規行)を追加する際、
「同時実行違反:UpdateCommand によって、処理予定の1レコードのうち0件が処理されました。」
このエラーが出て、新規行を追加できませんでした。
同時実行違反エラーというのが、DataAdapterに設定したUpdateCommandのWHERE句に指定した値で行が参照できないときなどに出力されるエラーです。
このときのコードが下記のものです。
VB.NETでプログラミングするとき、必須なのがコードエディタですね。
一般的なテキストエディタでテキストを一行コピーするとき、行を選択して、コピーCTRL+Cで行います。
ですが、VB.NETのコードエディタでは、カーソルがある行で、コピーCTRL+Cを行うだけで、一行コピーが可能です。行選択をしなくっていいってのが、とてつもなく便利です。
同じように、ペーストCTRL+V、切り取りCTRL+Xも行に、カーソルがありさえすれば、機能してくれます。
VB.NETでDataSetにDataTableを追加して、コントロールのDataSourceに登録して表示。
この処理を行った後、内容をすべてリロードするときにDataSetに登録したDataTableにそのままリロードをかけ、上書きすると処理速度がぐっと落ちます。
この際、DataSet.Tables プロパティを使用して、DataSet内に該当テーブルが存在するか確認し、DataSet内の該当DataTableをクリアーしてから再登録すると速度も落ちずスムーズに登録できます。
MSDN .NET Framework クラス ライブラリ DataSet.Tables プロパティ
続きを読む…
CSVファイルから、インポート処理する際などに、事前にレコードの総数を提示しておきたかったり、プログレスバーを使用して、処理の進行を表示したいときなどに、CSVファイルのレコード総数(総行数)が必要になります。
ですが、StreamReaderなどで読み込んでもCountなどは使えないため、一発取得の方法がありませんので、読み込んだファイルの行数を1から数える必要があります。
データを扱うソフトなら、たいてい出力方法として、対応しているCSV形式と呼ばれるテキストファイル。
引用符と区切り文字で、データコピーが簡単に出力され、データの再利用にはよく使用されますよね。
CSV形式ファイルのインポートができれば、他ソフトで作成した住所録などが再利用できる可能性が広がります。
ひいては、利用ユーザの拡大につながりますので、インポート、エクスポートは必須機能ですね。
ソフト開発において、避けて通れないのがエラー制御でしょう。
なんとしてでも、強制終了「ブチッ」……は、避けたい所です。
強制終了するにしても、なにかメッセージを提示して終了させたい。
VB.NET(.NET Framework)から導入された
Try…Catch…Finallyステートメントですが、VB6.0までのエラー処理の、On Error Gotoとは、かなり違います。
Visual Basic6.0までは、Len関数を使用して、文字列の長さを取得していました。
Dim hogeStr as string Dim hogeLength as integer hogeStr = "1234567890" hogeLength = Len(hogeStr )
.NET Frameworkでは、System.StringクラスのLengthプロパティから取得します。
Dim hogeStr as string = "1234567890" Dim hogeLength as integer = hogeStr.Length
こうしてみると、.NET Frameworkの方が、簡潔でわかりやすいですね。