sql >> データベース >  >> RDS >> Mysql

MySQL接続プール数

    コードにはいくつかのことがあります。

    • 最初にOption Strictをオンにします 。関数は文字列を返すように宣言されていますが、Objectを返そうとしています Return result
    • すべて Disposeを実装します メソッドはUsing内で使用する必要があります ブロック。これにより、オブジェクトを宣言して初期化し、使用して、最後に破棄することができます。
    • Parameters.Add AddWithValueよりも優れています 。後者は、DBプロバイダーにデータに基づいてデータ型を推測させる。
    • 負荷とそのメソッドが頻繁に使用されるかどうかに応じて、データをDataTableにロードできます。 DBに何度もクエリを実行するのではなく、その上でルックアップを実行します。

    中心的な問題は、(おそらく)DBCommandを破棄しないことです。 物体。使用しているコンストラクターを見てください:

    Dim cmdx As New MySqlCommand(cmdTextx, connx)
    

    DBCommand オブジェクトには、接続への参照が渡されます。接続を明示的に破棄しても、cmdx まだそれへの参照があり、それ 処分されませんでした。 Using ブロックを使用すると、物を確実に廃棄することが簡単になります:

    Dim sql = "Select `Cert` From `Courses` WHERE `ID`[email protected]"
    
    Using dbCon As New MySqlConnection(MySQLConnStr)
        Using cmd As New MySqlCommand(sql, dbCon)
            cmd.Parameters.Add("@Id", MySqlDbType.Int32).Value = CourseTypeID
            dbCon.Open()
            Dim result = cmd.ExecuteScalar
    
            If result Is Nothing OrElse result Is DBNull.Value Then
                Return String.Empty
            Else
                Return result.ToString()
            End If
        End Using           ' close, dispose of conn
    End Using               ' dispose of DBCommand
    

    インデントを減らすために、アイテムを1つのUsingに「スタック」することができます ブロック:

    Using connx As New MySqlConnection(MySQLConnStr),
        cmd As New MySqlCommand(sql, connx)
        ...
    End Using
    

    最初の行の終わりにあるコンマに注意してください。

    これがリークの原因ではなかったとしたら、私は驚きます(もちろん、すべてのコードを変更する必要があります)。




    1. MySQLでデータベースの名前を変更する方法

    2. MySQLクエリでLIMITを指定してSELECTを使用するときにすべての行をカウントするにはどうすればよいですか?

    3. オンライン求人ポータルデータモデルの改善

    4. MySQL-挿入エラーを無視します:重複エントリ