문제

LINQ를 사용하기 위해 기존 VB.NET 응용 프로그램을 리팩토링하고 있습니다. 성공적으로 작동 할 수 있었지만 클라이언트 머신에서 1 분 이상이 걸립니다!

데이터베이스 테이블에 많은 행이 있지만 동일한 컴퓨터 (데이터 세트를 사용하는)의 이전 버전의 프로그램은 5 초가 걸립니다.

내 LINQ 쿼리는 다음과 같이 꽤 표준입니다.

Dim query = From t As TRANSACTION In db.TRANSACTIONs _
where t.transactionID = transactionID _
select t

그들은 단지 하나 또는 제로 행만 반환합니다. 이견있는 사람?

도움이 되었습니까?

해결책

거대한 시간 차이 (5 초에서 60 초 이상)에 놀랐습니다. 나는 그것이 거래 엔티티가 얼마나 복잡한 지에 달려 있다고 생각합니다. LINQ에서 SQL은 결과 세트에서 각 행을 처리하고 객체로 전환 한 다음 상태 추적 정보를 데이터 콘텍스트에 추가합니다. 데이터 세트는 단순히 데이터를 원시를 저장하고 데이터 가능에서 읽을 때 강력하게 입력 한 데이터로 처리합니다. L2가 12 배 비용 증가를 기대하지는 않지만 약간의 증가를 기대할 것입니다.

다른 팁

붙여 넣은 코드는 실제로 데이터베이스에 전혀 액세스하지 못합니다. '쿼리'를 사용하여 다음에 수행하는 작업은 데이터가 클라이언트로 전송되는 양을 결정합니다. 나중에하고있는 일이 LINQ 버전이 데이터 세트 버전보다 더 많은 데이터를 다운로드 할 수 있습니까?

프로젝트에서 동일한 전환을 수행했으며 LINQ에서 동등한 또는 더 나은 성능 만 보았지만 LINQ 버전이 서버에 훨씬 더 많은 왕복을 수행하는 인스턴스가 있습니다. 두 개의 개별 서버 쿼리로. 나는 일반적으로 작업을 수행하기 전에 데이터를 로컬로 가져 오기 위해 .tolist ()를 수행하여 이것을 해결했습니다. 때때로 SQL 프로파일 러를 사용하여 무대 뒤에서 무슨 일이 일어나고 있는지 알아 내야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top