#10 | Databaseオブジェクト変数の通用範囲とオープンするタイミング | ||||||||||||||||
クライアントサーバーでは、「Accessの起動時のフォームでデータベースへのログインを行い、以降終了するまでそれを維持しておくとよい」としばしば見聞きします。そこで、データベースにアクセスするたびにデータベースを開いてDatabaseオブジェクト変数を設定する場合と最初に一度だけ設定する場合とで実行時間を比較してみたいと思います。実際には、1回データベースを開くためにどれぐらいの時間がかかるかを調べることになります。本来はクライアントサーバーの環境で行うべき実験ですが、残念ながらその環境がないため、ローカルでJETデータベースエンジンに対してだけ行うものとします。 Dim dbs As Database
Dim iintLoop As Integer ts_watch "測定開始", True '毎回データベースを開く 'カレントデータベースの場合 For iintLoop = 1 To 100 Set dbs = CurrentDb dbs.Close Next iintLoop ts_watch "カレントデータベース+Private" '外部のデータベースの場合 For iintLoop = 1 To 100 Set dbs = DBEngine.Workspaces(0).OpenDatabase("c:\tmp\test2.mdb") dbs.Close Next iintLoop ts_watch "外部データベース+Private" '最初に一度だけデータベースを開く 'カレントデータベースの場合 For iintLoop = 1 To 100 If (pdbs Is Nothing) Then Set pdbs = CurrentDb End If Next iintLoop pdbs.Close: Set pdbs = Nothing ts_watch "カレントデータベース+Public" '外部のデータベースの場合 For iintLoop = 1 To 100 If (pdbs Is Nothing) Then Set pdbs = DBEngine.Workspaces(0).OpenDatabase("c:\tmp\test2.mdb") End If Next iintLoop pdbs.Close: Set pdbs = Nothing ts_watch "外部データベース+Public" そして、テスト結果はつぎのようなものになりました。なお時間の単位は"秒"です。
結果を見るまでもなく、最初に一度だけデータベースを開く方が速いのは当然です。また、一回当りのオープン時間の差異を見る限り、実際のアプリケーションを動作させて感じられるような値ではありません。ただ、実際にそのアプリケーションを動作させる環境でこの値がどう変るかは確認したいところです。一人がローカルで使うデータベースであればこんな時間は完全に無視できるでしょう。一方、サーバーにデータベースがあり、ネットワークで共有している場合には、ネットワークの混み具合やデータベースの利用者数、あるいはデータベースを開く頻度によって無視できない時間と考えられるかもしれません。さらにODBCを使ってサーバーベースのデーターベースにアクセスする場合には、ODBCのスループットやサーバー側のユーザー認証などによって上記の差異はもっと大きくなる可能性もあります。しかしながら、ローカルでかつスタンドアロン環境でしかテストできない場合の結論としては、「データベースを開くにはそれなりに時間が掛かるが、ローカルで使う限りは無視してよい程度である。」ということになると思います。 |
|||||||||||||||||
|
Copyright © T'sWare All rights reserved |