ぽにょろん

思いついたこととメモ

c#からFirebirdのDBにアクセスした後、Exeの終了が遅い。その2。

Firebird Embeddedを使用した後、プロセスの終了が遅い件ですが、
その後色々調べたところ、似たような件で悩んでいる人はいるようでした。

stackoverflow.com

ただ、解決にはいたっていないようです。
試しに 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種類を用意して、時間計測。

f:id:kowill:20151012230435p:plain

FirebirdClient2 : FbConnection.ClearAllPools()を呼ぶ方。
FirebirdClient : FbConnection.ClearAllPools()を呼ばない方。

あまり厳密ではないですが、手元で何度かやってみたけど、結果は変わらず。