DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C# 配列について

  • 題名: C# 配列について
  • 著者: いわし
  • 日時: 2005/09/13 13:39:54
  • ID: 12747
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[C#]
分類:[.NET]

C#にて、大量のデータ作業を行うプログラムを作成しています。
(Oracle9iのデータ読み書きを伴う作業です。
件数は10万件ほどで、これに付随して読み込みが20-30万回発生します)
試しにDB上にワークテーブルを作成して、処理の一部を行わせたところ、
目標としている時間には遠く及ばない結果となりました。

そこで、処理に関連するテーブルを全て配列に入れて、ローカルで全作業を
完了し、完了したデータをOracleにセットしようと考えました。

しかし、配列のバイナリサーチはキーが一つまでです。
2つ以上のキーや、複数件のレコードを返すのには向いていないような気もします。
今現在考えているのは、各テーブルのレコード(行)をクラスにして、
その行クラスをコントロールするクラスを作成しようと思っています。
こうすれば、何か困ったことがあっても、ソースを記述すれば解決できるような
気がするからです。

前置きが長くなりましたが・・・。
このように、ローカルにデータを引っ張ってきて、処理を行う場合に適した方法
というのをお教え願えたら、と思います。
もしくは、参考になるサイトをご紹介頂けないでしょうか?

ちなみに、このページのサンプルにあるArrayListに入れて検索する方法は
こういった、大量のデータ処理に向くのでしょうか?
こんにちは、じゃんぬ です。

■No12747に返信(いわしさんの記事)
> (Oracle9iのデータ読み書きを伴う作業です。
> 件数は10万件ほどで、これに付随して読み込みが20-30万回発生します)

ここがちょっと想像つきませんでした。(そんな処理今まで見たことないので)
というよりは、この部分を改善すれば良いのではないかと思います。

> そこで、処理に関連するテーブルを全て配列に入れて、ローカルで全作業を
> 完了し、完了したデータをOracleにセットしようと考えました。

テーブルを配列に入れるの意味はわかりかねますが、
それを言うのであれば、ストアドでやった方が良いのではないでしょうか?
わざわざ、クライアント側にデータを持ってくる必要さえもなくなります。

> ちなみに、このページのサンプルにあるArrayListに入れて検索する方法は
> こういった、大量のデータ処理に向くのでしょうか?

処理速度を求めるのであれば、不向きであると言えます。
> それを言うのであれば、ストアドでやった方が良いのではないでしょうか?
そうですね。それも考えました。
しかし、再帰やらいろいろあって、制御が弱くデバッグしにくいストアドは
止して、クライアントで作業することにしたんです。

> 処理速度を求めるのであれば、不向きであると言えます。
でしょうね・・・。
ただ、DBに対しいちいち読み書きするよりはいくらかマシと言えると思います。
とりあえず、ArrayListに入れずに単純に配列を作成し、Arrayオブジェクト使って
外からSortとSearchをかけるプログラミングをしようと思います。

ArrayListってJavaで言うところのハッシュですよね?(ちがってたらスイマセン)
上記のようにすれば、ちょっとは早くなると思うんですが・・・
これでダメなら、もうストアドに行くとします。

ご回答ありがとうございました。
解決済み!
>>処理速度を求めるのであれば、不向きであると言えます。

場合によると思います。

> ArrayListってJavaで言うところのハッシュですよね?(ちがってたらスイマセン)

違いますよ。
ヘルプにもさらっと書いてあります。

ArrayList に対して Contains なんかかけたらえらい遅いです。(体験談)
検索は、Sorted な状態の ArrayList に対して BinarySearch をかけるのが最速です。

複合キーによる処理が必要なら、IComparer の実装クラスで工夫すればいいことです。

> 上記のようにすれば、ちょっとは早くなると思うんですが・・・
> これでダメなら、もうストアドに行くとします。

いろんな要素が絡むのでパフォーマンス測定をお忘れなく。
ボトルネックの抽出もなしに闇雲に突き進んでも、良好な成果は得られません。

・データの引き出し
・データの処理
・処理結果の戻し

等々について、きちんと計時しながら検討を進めましょう。

DOBON.NET | プログラミング道 | プログラミング掲示板