문제

나는 Subsonic 및 LINQ를 처음 접했으며 단일 레코드를 검색하는 가장 짧고 최적의 방법을 알아 내고 있습니다.

다른 방법은 더 빠르며 단일 레코드를 얻기 위해 이것보다 작성하는 데 적은 코드가 필요합니까?

User user2 = DB.Select().From(User.Schema)
.Where(User.PasswordColumn).IsEqualTo(password)
.And(User.SINumberColumn).IsEqualTo(siNumber)
.ExecuteSingle<User>();

나는 앤츠 스프로 필러 도구를 점검하는 데 사용했으며, 29.12ms CPU 시간의 AVG가 필요합니다 - 10 번 이상의 런 테스트

이것이 더 오래 걸리는 곳

UserController uc = new UserController();
Query query = new Query("User");
query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);   
User user = uc.FetchByQuery(query).First<User>();

마지막 라인 만 256.08ms CPU 시간을 보낼 수 있고 USERController는 66.86ms를 취합니다.

제안이 있습니까?

도움이 되었습니까?

해결책

IIRC, 쿼리 객체가 유창합니다. 즉

query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);

다음과 같이 읽어야합니다.

query = query.WHERE(User.Columns.Password, password);
query = query.WHERE(User.Columns.SINumber, siNumber);

테스트에서 증가한 시간은 이로 인해 설명 될 수 있습니다 (모든 사용자 항목을 요구 한 다음 첫 번째를 잡습니다).

다른 팁

"병목 현상"은 생성 된 쿼리 실행이 될 것입니다. 특정 쿼리가 느리면 데이터베이스 제공 업체의 인덱싱 기능을 사용하여 최적화해야합니다.

두 번째 경우, 추가 실행 시간이 LINQ가 컬렉션에서 첫 번째 항목을 반환하는 오버 헤드라고 가정합니다.

내 대답은 첫 번째 방법은 가장 좋은 방법이며, 29ms가 허용되지 않는다면 (DB를 호출 할 때는 불합리하지 않다고 생각합니다) DB에 일부 인덱스를 추가하여 속도를 높이십시오. 검색.

요한이 돈에 맞는 것 같아요. Subsonic을 테스트하여 SQL 문을 작성하는 데 걸리는 시간이 아닌 SQL 문을 작성하는 데 SUBONCON이 얼마나 걸리는지 테스트하는 데 시간이 얼마나 걸리는지 테스트하려면 SQL 문을 작성하는 데 걸리는 시간과 결과를 반환하는 데 DB가 얼마나 걸리는지 동시에 (테스트를 분리해야 함).

아마도 일반적인 오래된 SQLCommand로 결과를 얻는 데 걸리는 시간을 테스트하고 연결 및 매개 변수를 전달하고 비교가 필요한 시간을 확인해야합니다.

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