c#からFirebirdのDBにアクセスした後、Exeの終了が遅い。その2。
Firebird Embeddedを使用した後、プロセスの終了が遅い件ですが、
その後色々調べたところ、似たような件で悩んでいる人はいるようでした。
ただ、解決にはいたっていないようです。
試しに FbConnection.ClearAllPools() がどれくらい効果あるのか試してみました。
結論から言えば、ConnectionをPoolしているときはそれなりに効果ありますが、
やはり3秒は超えられない。
なにかのタイムアウト待ちなのか、どうなのか。
環境
- Firebird Embedded 2.5.4
- FirebirdSql.Data.FirebirdClient 4.8.0
検証
前回利用したものの最後に、ClearAllPools と Connection作る時にPooling を true にする処理を追加。
static void Main() { var i = 0; var max = 2000; while (i < max) { var connectionBuilder = new FbConnectionStringBuilder(); //.....諸々 connectionBuilder.Pooling = true; using (var connection = new FbConnection(connectionBuilder.ConnectionString)) { connection.Open(); connection.Close(); } i++; } FbConnection.ClearAllPools(); }
FbConnection.ClearAllPools() を呼ぶ場合と呼ばない場合の2種類を用意して、時間計測。
FirebirdClient2 : FbConnection.ClearAllPools()を呼ぶ方。
FirebirdClient : FbConnection.ClearAllPools()を呼ばない方。
あまり厳密ではないですが、手元で何度かやってみたけど、結果は変わらず。