2017-01-25 18 views
0

メイン画面に開始ボタンがあるウィンドウアプリケーションがあります。 exeを起動して開始ボタンを押すと、SQLデータベースへの接続が開きます。私はそれ自身で閉じない限り、接続を明示的に閉じるわけではないので、dbとの接続を再確立します。私の質問は、これはパフォーマンスの問題を引き起こすでしょうか?どの時点でも1つの接続しか開いていないので、私はそれを疑っています。ご意見をお聞かせください。前もって感謝します。.NETウィンドウでSQL接続を開くアプリケーションが開始され、終了しない

コードは以下の通りである:

ます。Private Sub Form1_Load(のSystem.ObjectとしてByVal送信者、System.EventArgsとしてByVal e)のハンドルMyBase.Load

Timer1.Interval = 30000 
    fnDbConnect() 
    lblMessage.Text = "" 
End Sub 

プライベートサブbtnStartSMS_Click(ByValを送信者としてSystem.Objectの、System.EventArgsとしてByVal e)はbtnStartSMS.Click

btnStartSMS.BackColor = Color.Red 
    If ObjCn.State = ConnectionState.Open Then 
     Timer1.Enabled = True 
    Else 
     If fnDbConnect() Then 
      Timer1.Enabled = True 
     Else 
      MsgBox("An error occured while connecting to database. Please try later", MsgBoxStyle.Critical) 
     End If 

    End If 

End Sub 

を処理し、ObjCn.State = ConnectionState.Closedはどこアプリケーションと、それがチェックされますTrueの場合、fnDbConnect()が呼び出されます。

+1

これは、同時に複数のクライアントアプリケーションがサーバーに接続しようとするかどうかによって異なります。さらに、接続を使用しないと、必然的にタイムアウトになるので、再接続する必要があります。あなたはこれをやっている理由を正確に検討する必要があります。 – zaitsman

+0

*それが単独で閉じない限り* - これは検出するのが難しく、データベースとやりとりするすべての呼び出しが処理を必要とします。 –

答えて

3

これ以上コードを書いていないので、常時接続しておくと意味がありません。 IMHO接続プーリングを使用することをお勧めします。また、アプリケーションの成長が始まると、より良い方法になります。あなたは、接続が開いたままにした場合

using (SqlConnection connection = new SqlConnection("yourConnectionString")) 
{ 
    connection.Open(); 
    // Do whatever you need to do 
    connection.Close(); 
} 

は、その接続は、データベースサーバーへのcomunicateする必要がありますいくつかの他の事のために使用することはできません。言ったことすべてについて、あなたは自分のSQL接続この方法を行うことができます。 また、接続を開いたままにしておくと、ガベージコレクタが実行されるたびに接続が抹消されて処理されます。 基本的には、使用する必要があるときはいつでも、接続を開いたり閉じたりしてください。あなたの接続を開いたままにしてはいけません。このため、usingステートメントの例のように、より良い使用法が開いています。これにより、操作が完了したときに接続が正しく処理されます。

+1

+1。 OPの元のスキームで、データベースにも触れるマルチスレッドを含む何か*を行うことが決定された場合、どれだけの再作業が必要かを想像できますか? –

関連する問題