|
分類:[VB.NET/VB2005 以降]
SQLiteで、ネットワ2ークディスクにある、郵便番号KEN_ALL.dbの総行数を取得するものです データは12万件程度あります。1台のパソコンから実行すると、1回目所用時間5秒程度、2回目
1秒程度です、 2台のパソコンで、このプログラムを実行して同時にアクセスすると、場合によって症状は異なりま
す。 2台とも5秒程度で良好 2回目は、2台とも1秒程度 1台は、15秒程度処理時間がかかる。もう一台は、5秒程度 2台とも15秒程度 二台ともダンマリとなって、強制終了しなくてはならない。 この様に症状はさまざまです。
排他制御の関係かと Connection.ConnectionString = "Version=3;Data Source=" & db_now_path & ";New=False;Compress=True;isolation_level=Exclusive" としてみたり、Differed、Immediate、Exclusiveと全部指定してみましたが、 どれも大差ありませんでした。
データの件数の少ないものでは、二人で同時実行しても発生しません。
Imports System Imports System.Management Imports System.Text Imports System.Windows.Forms Imports System.Data Imports System.Data.SQLite Imports System.IO Public Class Form1 Public db_now_path As String Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click db_now_path = "\\LANDISK\disk\郵便番号KEN_ALL.db" table_row() '総行数取得 End Sub Function table_row() '総行数取得 Dim Transact As SQLiteTransaction 'トランザクションクラス Dim Connection As New SQLiteConnection Dim Command As SQLiteCommand Dim DataReader As SQLiteDataReader Connection.ConnectionString = "Version=3;Data Source=" & db_now_path ' &
";New=False;Compress=True;" Connection.Open() Transact = Connection.BeginTransaction 'トランザクションスタート Command = Connection.CreateCommand 'コマンド作成 Command.CommandText = "select count(*) from table1" '総行数取得 Command.ExecuteNonQuery() 'SQLを実行 DataReader = Command.ExecuteReader table_row = DataReader.Item(0).ToString '総行数取得 Transact.Commit() 'データをコミット DataReader.Close() Command.Dispose() Connection.Close() Connection.Dispose() MsgBox(table_row) Exit Function End Function End Class
|