2011-02-02 4 views
3

私は、ADO.NETとLINQの両方を使用して、1つのサーバー上のデータベースのペアにアクセスするクラスを持っています。 DB内のテーブルは広範ではないので、エンティティオブジェクトはかなり軽いです。私はもちろん、経験とネット記事を使って、私のようにコードを書きました。たとえば...接続プーリングの観点から何か問題がありますか?

http://dotnetperls.com/sqldataadapter http://www.velocityreviews.com/forums/t71781-set-maximum-pool-size-in-web-config.html http://msdn.microsoft.com/en-us/library/ms971481#adonetbest_topic5

あるサーバー私のコードを実行しているのは自分のコードを実行しているだけで、dbホストと同じサーバーではありません。私の.NETアプリケーションサーバー(それはWindowsサービスだが、今は重要ではないように思えるので、私はそこに住みたいとは思わない)からDBサーバーに向かう接続を見てみると、接続数は約200ですが、確かにそれより少ないはずです。私はappSettings.configで最大プールサイズを10に設定しているので、約10でなければなりません。

誰でも私の接続コードを見て、私が接続を引き起こす何かをしているかどうか教えてください。ここで

は私のLINQのDBコンテキストの作成である:ここで

private const string ConnectionKey = "SQL2"; 
protected static string ConnectionString 
{ 
    get 
    { 
     return _connectionString = (_connectionString == null) ? ConfigurationManager.ConnectionStrings[ConnectionKey].ConnectionString : _connectionString; 
    } 
} 
private static string _connectionString = null; 

protected static PricingDBDataContext ContextDB 
{ 
    get 
    { 
     if (_context == null) 
     { 
      _context = new PricingDBDataContext(ConnectionString); 
     } 

     return _context; 
    } 
} 
private static PricingDBDataContext _context = null; 

は、物事のADO.NET側である:

protected DataSet GetDataSet(bool isSproc, string cmdStr, params object[] args) 
{ 
    using (SqlConnection conn = new SqlConnection(ConnectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand(cmdStr, conn)) 
     { 
      cmd.CommandType = isSproc ? CommandType.StoredProcedure : CommandType.Text; 
      for (int index = 0; index < args.Length; index += 2) 
       cmd.Parameters.AddWithValue(args[index].ToString(), args[index + 1]); 
      conn.Open(); 
      DataSet set = FillSet(cmd); 
      conn.Close(); 
      return set; 
     } 
    } 
} 

private DataSet FillSet(SqlCommand cmd) 
{ 
    SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
    DataSet set = new DataSet(); 
    adapter.Fill(set); 
    return set; 
} 

おかげで、

マット。

答えて

2

接続プールに明示的に何かを実行している場合は、おそらく間違っている可能性があります。

  • ADOはまったく同じ接続文字列
  • ほとんど騒ぎを持つ接続をプールします:デフォルトの設定は、ここでネット

    の初期の頃は心に留めておくべきいくつかのものですので、よく私を務めてきましたネットオブジェクトはIDisposableを実装しており、明示的にまたはブロックusingに処分する必要があります。これは接続、コマンド、データセットとデータリーダー

  • のLINQ 2 SQLおよびEFデータコンテキストを含んでもIDisposableを実装し、
+0

感謝して配置されなければなりません。上記の私のコードでは、私はすべてのことをやっていると信じています。接続Max Pool Sizeの設定は、無理矢理最後の試みでした。私のコードが間違っていると思いますか? –

関連する問題