|
分類:[VB.NET/VB2005 以降]
開発環境 VB2008 EXP 現在、以下のようなことを行おうとしています。
1.任意の抽出条件によりデータを抽出し、DataTableに格納する。 2.類似内容の行を排除するため、DataTableの各行について、対象行に含まれるキーワードが、 他の行に含まれている場合は、対象行を削除する。 (対象行に含まれるキーワードの抽出方法は、独自のロジックを使用します。) ※例 対象行のキーワードが、"りんご"・"バナナ"・"みかん"であった場合、 "りんご"・"バナナ"・"みかん"を含む他の行がDataTableに存在する場合は、対象行を削除する
そこで、自分なりに考え、以下のように処理を行ってみました。
1.検索結果をDataTableに格納 DataTableには、"テキスト"と"ID"という列があるとする。 2.DataTableの全行スキャンのためのループ開始 3. DataTableの対象行の"テキスト"項目より、含まれているキーワードを抽出(独自ロジック) 4. フィルタ用式を作成(例えば、対象行に含まれているキーワードが"りんご"・"バナナ"・"みかん"の場合、 テキスト LIKE '%りんご%' AND テキスト LIKE '%バナナ%' AND テキスト LIKE '%みかん%' AND ID <> (対象行のID) ※とりあえず、%記号等のエスケープは無視します 5. DataTable.Select(フィルタ式)やDataView.RowFilterでフィルタ式を設定する。 6. フィルタ式に該当する行がある場合は、DataTableの対象行をDeleteする 7.次の行に移動する(2.のループのはじめに戻る)
しかし、DataTable内の行数が1000件くらいだと、私のPCでは20秒近くかかってしまいます。 よく調べてみると、5.の処理をコメントアウトすると上記処理はすぐ終わるので、どうやらフィルタ設定で時間がかかるようです。 上記のようなことを実現し、かつもう少し処理を早くする方法はないでしょうか? もちろん、DataTableを使用しない方法でも結構です。 アドバイスの程、よろしくお願いします。
|