2011-02-02 3 views
3

ADO.NET과 LINQ를 모두 사용하여 한 서버에있는 데이터베이스 쌍에 액세스하는 클래스가 있습니다. DB의 테이블은 광범위하지 않으므로 엔티티 객체는 매우 가볍습니다. 나는 물론 경험과 인터넷 기사를 사용하여 나는 코드를 작성했다. 예를 들어 ...연결 풀링의 관점에서 잘못된 것을하고 있습니까?

http://dotnetperls.com/sqldataadapterhttp://msdn.microsoft.com/en-us/library/ms971481#adonetbest_topic5

서버이다 http://www.velocityreviews.com/forums/t71781-set-maximum-pool-size-in-web-config.html 어느 내 코드를 실행하는 것은 내 코드 만 실행하고 db 호스트와 동일한 서버가 아닙니다. 내. NET 응용 프로그램 서버 (그것은 Windows 서비스이지만, DB 서버에 연결하는 것을 바라 보는 것에서부터 현재는 비현실적 인 것처럼 보이기를 원하지 않습니다.) 연결 수는 약 200이지만, 확실히 그것보다 적어야한다. appSettings.config에서 최대 풀 크기를 10으로 설정 했으므로 약 10이어야합니다.

아무도 내 연결 코드를 살펴보고 연결이 끊어지는 원인이 될 수 있는지 알려 줄 수 있습니까?

다음
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; 
} 

감사합니다,

매트

은 여기 내 LINQ DB 컨텍스트 생성합니다.

답변

2

연결 풀에 대해 명시적인 작업을 수행하는 경우 일반적으로 잘못 처리했을 수 있습니다. 기본 설정은 다음

닷넷

의 초기 시절부터 저를 잘 역임했다 염두에 두어야 할 몇 가지 사항은 다음과 같습니다

  • ADO가 정확히 동일한 연결 문자열
  • 대부분의 고뇌가 연결을 풀 것입니다. net 객체는 IDisposable을 구현하므로 명시 적으로 또는 using 블록에 처리해야합니다. 이것은 또한 IDisposable를 구현하고
+0

감사를 폐기해야 연결, 명령, 데이터 세트 및 데이터 독자

  • Linq는 2 SQL 및 EF 데이터 컨텍스트가 포함되어 있습니다. 위의 코드에서는 모든 것을 수행하고 있다고 생각합니다. 연결 최대 풀 크기 설정은 무차별 공격에서 마지막 도랑 시도였습니다. 내 코드가 잘못됐다고 생각하니? –

  • 관련 문제