2010-02-17 9 views
3

SQL DataContext에 LINQ를 삭제하면 어떤 이점이 있습니까? 또는 이러한 DataContext 개체를 삭제하지 않는 문제가 있습니까?SQL DataContext에 LINQ를 삭제하면 어떤 이점이 있습니까?

예를 들어, 쉽게 코딩을 위해,이 경우

var list = from p in (new MyDataContext()).People where p.LastName.Contains("sommar") select p; 

, 나는 인스턴스를 new'd 한하지만 그것을 "폐쇄"또는 처분 ... 같은 작업을 수행 할 수 있습니다 어떠한 방식으로. 나에게 문제가 생길 가능성이 여전히 주변에 떠돌고 있습니까? 앤티를 올리려면 2000 번이라는 루프를 반복 해 봅시다. < 이탈리아어 : 억양 > 문제가 있습니까? </이탈리아어 : 악센트 >

+0

중복 : http://stackoverflow.com/questions/821574/c-linq-to-sql-should-datacontext-be-disposed-using-idisposable –

답변

2

L2S 데이터 컨텍스트는 닫히거나 삭제 될 필요가 없습니다. 그러나, 나는 당신이하고있는 일을하고 싶지 않을 것이라고 생각한다. 2000 회 반복하여 새로운 것을 새로 시작한다. 데이터 컨텍스트는 주요 스테로이드의 SQLConnection과 같이 무거운 가중치 객체입니다. 2000 년을 루프로 작성하는 오버 헤드를 원하지 않습니다. OTOH, 너는 너무 오랫동안 그들을 위해 살고 싶지 않아.

새 작업을 수행하고 작업 단위를 수행 한 다음 프레임 워크가이를 처리하도록하거나 직접 수행하십시오. 그렇게하는 데 아무런 해가 없습니다.

+0

포인트를 찍었습니다. 물론 가설적인 상황이었습니다. 즉, 2000 데이터 컨텍스트를 새로 고치는 데있어 유일한 문제는 루프가 실행되는 동안 성능이 저하된다는 것입니다. 메모리 누출이 없습니까? –

+2

-1 "heavy weight object"의 경우 +1, "작업 단위 수행"의 경우 +1. DataContext는 한 번에 작업 단위 (UOW)에 사용되도록 만들어져 설계되었습니다. 무거운 짐 객체를 호출하면 사람들이 단일 작업 단위보다 오랫동안 생명을 유지하도록하여 훨씬 더 많은 문제를 유발할 수 있습니다. 단호한 루프에서 2000을 생성하는 것은 과도 할 수도 있지만 단일 데이터 컨텍스트에서 모든 반복을 수행하는 것은 적절하지 않을 수 있습니다. 특히 다른 DataContext를 통해 동시 비동기 액세스가 발생하는 경우에는 특히 그렇습니다. –

+0

@Byron - Context 객체에 메모리 누수가 있는지 여부를 주석으로 처리 할 수 ​​없습니다. 그러나 당신이 기술적 이유 때문에 강요 당하지 않는 한, 나는 2000 년을 새로운 것으로 만들지 않을 것이다. –

관련 문제