2010-12-31 5 views
2

asp.net mvc 응용 프로그램에서 LINQ to SQL을 사용하고 있습니다. 아약스 호출을 통해 저장 프로 시저를 호출합니다.LINQ to SQL DB 연결을 닫지 않음

2-3 명의 사용자에 대한 활성 연결은 100 개의 활성 연결로 연결됩니다. 그런 다음 서버 시간 초과가 발생합니다.

그런 다음 IOC -autofac을 사용하여 datacontext가있는 동일한 저장소를 다시 사용했습니다. 이제는 SQL 서버에 로그인 한 사용자 당 하나 더한 액티브 연결을 얻습니다. 전 본 적이 없어요.

  1. 왜 Lin2sql은 사용하지 않을 때 연결을 끊지 않습니까?
  2. 로그인 한 세션에서 ajax 호출의 저장 프로 시저를 호출하면 새로운 활성 연결이 생성됩니까?
  3. 루프가있는 저장 프로 시저 또는 waitfor가 연결을 열 수 있습니까 ??
+0

일부 코드를 추가해야합니다. 당신은 어딘가에서 연결을 해제하지 않습니다 ... – gbn

+0

Isnt LINQ 2 SQL은 게으른로드가 필요할 때만 연결을 열 것으로 가정합니다. 또한 그것은 더 이상 필요가 없어지더라도 연결을 닫습니다. 권리?? – Joe

+1

올바르지 않습니다. 지연 연결은 연결을 열거 나 닫을 때와 아무 관련이 없습니다. –

답변

1

L2S 컨텍스트 개체와 연결된 연결은 연결 개체가 사용자 또는 GC에 의해 삭제 될 때만 삭제됩니다. 비 활동 때문에 떨어지지는 않을 것입니다.

Using 문에서 컨텍스트 개체를 만들려고하면 적절하게 처리됩니다.

+0

입니다. 저장소 문에서 datacontext는 언제 using 문을 사용합니까? – Joe

+0

@Joe : 도움이 될 것입니다 - http://stackoverflow.com/questions/2357615/how-do-i-correctly-dispose-a-linq-to-sql-datacontext-in-a-repository –

+0

일회용을 구현합니다. 저장소에서하지만 나는) a) 사용하지 않는 저장소를 감쌌다. b) autofac의 수명이 제한되었다. – Joe