2009-03-12 2 views
2

상당히 복잡한 사이트에 대해 Linq를 SQL에 사용하고 있습니다. 라이브가 끝난 후 많은 데이터베이스 시간 초과가있었습니다. 내가 알아 차린 첫 번째 사실은 데이터베이스에 상당히 많은 수의 연결이 있다는 것입니다.Linq to SQL 연결

ADO.net의 배경에서 우리는 모든 사이트가 하나 또는 두 개의 풀링 된 연결 만 사용하도록 코드를 작성 했으므로 소수의 동시 사용자라도 만족스러운 성능을 얻을 수있었습니다.

내 질문에,이 결함이있는 오래된 방법 이었습니까, 아니면 LINQ 할 방법이 있습니까? 우리의 성능 문제는 DB에 너무 많은 연결에 의한 것 같습니다. 그러나 이것이 문제라면 LINQ에 대한 모든 자습서에서 언급 될 것이라고 생각했습니다.

제안 사항?

답변

3

나는 당신이 DataContext를 유지하고 있고, 끝났을 때 Dispose를 호출하지 않는다고 추측하고있다.

DataContext를 초기화하고 작업을 수행 한 다음 완료되면 처리해야합니다. 당신은 그것들에 대한 참조를 오퍼레이션간에 유지하면 안된다.

바람직하게는 IDisposable에 대한 호출을 처리하기 위해 using 문을 사용합니다.

연결 풀링과 관련하여 SqlClient는 기본적으로 연결을 풀링하므로 명시 적으로 해제하지 않으면 이미 사용 중이어야합니다. 물론, 당신이 사용하고있는 연결을 해제하지 않으면, 풀링은 지금까지만 당신을 데려 갈 것입니다.

+0

가비지 컬렉터가 데이터 컨텍스트를 폐기하는 일을 처리하지 않습니까? 또는 트래픽이 많은 사이트에서 너무 짧은 시간에 열리는 DataContext가 너무 많아서 가비지 수집기가 너무 늦을 수 있습니다. –

+0

@Adrian Grigore : GC는 궁극적으로 데이터 컨텍스트를 처리하지만 데이터 컨텍스트는 열려있는 데이터베이스 연결을 유지하므로 완료되면 명시 적으로 닫아야합니다. – casperOne

+0

나는 거기에 datacontext를 사용하여 적절히 처리하고있다. 그러나 나는 연결을 닫아야 만한다는 것을 알지 못했다. – ColinRobertson