- - PR -
VB.NETでのDBデータ保持処理について
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-20 14:49
現在、Accessデータベースmdbから値を取得し、画面に表示するというアプリを作成しています。
DBから取得した値を保持する形として、DBテーブルクラスを作成し、 作成したテーブルクラスのプロパティに値をセットしていくという方法をとっているのですが、 メモリ消費などが高く、処理が遅いように感じられます。 DBクラスを作って値を保持するやり方はよくないのでしょうか。 具体的には、member.getEntrynumber()みたいな形でデータを取得しています。 現在、スペックはそれなりのPCでリレーションの深さは3つほどで、データ件数10件前後での動作で、3秒弱かかっています。 パフォーマンス的によい方法がありましたら、教えていただけないでしょうか。 以上よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2006-11-20 15:16
別にそんなことはないと思いますが...
いまいちよく理解できませんでした。
実際のスペックを教えてください。
私はVB.NET 2005においてOleDbDataReaderを使用してmdbファイルからデータを取得するプログラムを書いたことがありますが、パフォーマンス的に問題になったことはありませんでした。 _________________ -------------------------------------------- HIRO's.NET PowerShell,VB.NET,C#のTipsを掲載しています HIRO's.NET Blog PowerShell,VB.NET,C#を中心とした技術ネ | ||||||||||||||||
|
投稿日時: 2006-11-20 15:24
HIROさん
すいません。詳細なスペックを書き忘れていました。 Pentium4 3.2Gのメモリは1.5Gです。 私が作成したDBクラスというのは、 Memberというテーブルがあり、Memberテーブルのカラムにentrynumberがある場合に、 Memberクラスを作成し、entrynumberカラムのゲッターセッターを追加したものです。 DBアクセスせずに描画だけだと早いので、DBアクセスが原因だと思いました。 DBからDBクラスへの格納方法は、oledbAdapterのselectcommandで SQLクエリーを実行し、取得したテーブルをDBクラスにセットしています。 | ||||||||||||||||
|
投稿日時: 2006-11-20 15:35
確認です。
Memberクラスをインスタンス化するのは、Memberテーブルが"entrynumber"という名前のフィールド(カラム)を持っている場合ということでしょうか? もしそうだとして、Memberテーブルが"entrynumber"という名前のフィールド(カラム)を持っているかを確認し、インスタンス化するまでの時間が掛かっているだけということはありませんか? どこの処理で時間が掛かっているかをTimer関数などを使用して計測してみてはどうですか? _________________ -------------------------------------------- HIRO's.NET PowerShell,VB.NET,C#のTipsを掲載しています HIRO's.NET Blog PowerShell,VB.NET,C#を中心とした技術ネ | ||||||||||||||||
|
投稿日時: 2006-11-20 15:51
HIROさん
>Memberクラスをインスタンス化するのは、Memberテーブルが"entrynumber"という名前のフ>ィールド(カラム)を持っている場合ということでしょうか? その通りです。 カラム名ですが、 Collectionにカラム名をキー、カラムデータをオブジェクトとして確保しておき、 Memberテーブルをインスタンス化する際に、各DBクラスにコンストラクタのようなものを作り、 作成したコレクションをコンストラクタに渡し、各DBクラスで予め定義しておいたカラム名で それぞれのフィールドを取得して設定するという処理を行っています。 もう少し登録データ数を増やしてタイマーで計測してみようと思います。 | ||||||||||||||||
|
投稿日時: 2006-11-20 16:21
メモリについては、どのように計測したのでしょうか? たとえば、タスク マネージャの値はあてにならなかったりしますけど。
もっとも大きなファクタである、'実際の抽出件数' と 'データ量' についての情報がないですね。 数万件もの結果を返しているのであれば、ロジックどうこうの問題ではないですよ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-11-22 11:09
じゃんぬねっとさん
メモリはタスクマネージャで計測しました。 CPU使用率は全然高くないのに処理が遅いです。 実際の抽出件数は10件です。 データ量というのはDBの総件数のことですか? 総件数は30件です。 コーディングは、データの件数分のDBクラスを用意し、 紐づくテーブルがあればそのテーブルのクラスを作成し、 getToリレーション先のようにして取り出せるようにしてます。 DBからデータを取り出す処理は、リレーションの深さの分だけ For分が深くなってます。 システムとしては数万件になることはないです。 | ||||||||||||||||
|
投稿日時: 2006-11-22 11:40
コードを見ていないので何ともいえないですが、For文が深くなっているというのが気になりますね。 抽出件数は10件とのことですが、デバッガでステップ実行してみましたか? 抽出件数が10件でもコーディングの仕方によってはFor文をすぐに抜けられないような作りになっていいたりしないか確認してみてはどうでしょう _________________ -------------------------------------------- HIRO's.NET PowerShell,VB.NET,C#のTipsを掲載しています HIRO's.NET Blog PowerShell,VB.NET,C#を中心とした技術ネ |