2010-12-29 1 views
0

EF4에 저장소를 만들고 있습니다. 이 중 하나의 방법에 대해 암호와 사용자 이름을 사용하여 사용자를 확인합니다. 이 메소드는 사용자 수를 반환하므로 0은 존재하지 않으며 1은 사용자를 의미합니다. 방금 사용자 객체를 반환하고 null을 확인하면 많은 차이가 있습니까?객체를 반환하는 것보다 더 쉽게 반환 할 수 있습니까? 스택 오버플로!

+0

bool을 반환하지 않는 이유는 무엇입니까? – Mariusz

+0

당신이 결과를 가지고 무엇을 하려는지 알지 못하기 때문에 * 더 나은지 판단 할 수 있습니다. 반환 될 수있는 사용자 데이터를 사용하지 않으려한다면 왜 반환해야합니까? 그러나, 당신이 * 필요로 할 것이라는 것을 안다면, 카운트를 반환 한 후에 데이터베이스를 얻기 위해 * 다른 * 여행을 계속합니다. 그러면 * 처음에 물건을 반환하지 않는 이유는 무엇입니까? * 귀하의 요구 사항을 결정해야합니다. –

답변

1

기술적으로 가장 효율적인 방법은 아마도 Any() 확장 방법을 사용하는 것입니다. 객체를 반환하면 해당 객체를 채우는 데 드는 비용이 발생합니다. 카운트를 반환하면 모든 레코드 (where 절이 적용된 후)를 거쳐 계산되는 비용이 있습니다. Any()Exists을 SQL에 사용해야하므로 SQL Server는 첫 번째 레코드를 찾자 마자 바로 중지 할 수 있습니다.

궁극적으로 나는 다른 사람들과 동의하지만, 이것은 곧바로 최적화를 시작하려는 곳이 아닙니다. 도널드 크 누스 (Donald Knuth)는 아마도 이것에 대해 가장 좋은 말을 가지고있을 것입니다. "조기 최적화는 모든 악의 뿌리입니다.

예를 들어,이 메서드가 bool을 반환하고 Any() 메서드를 사용한다고 가정 해 보겠습니다. 나중에 요청에 따라 데이터베이스에서 사용자 개체를 가져와야 할 수도 있습니다 (많은 일을하게 될 수 있습니다). 이제 일찍 최적화함으로써 실제로 데이터베이스에 대한 호출 수가 증가했습니다.

HTH

0

두 번째 버전이 더 좋을 것입니다. 미세 효율의 측면에서 그것은 중요하지 않습니다.

+0

그 이유는 무엇입니까? – hoakey

0

진실을 알고 싶다면 Hoakey. 두 가지 방법 모두 당신이 어떤 것을 선택 하느냐에 상관없이 무시할 수있을 것입니다. 코드를 이해하고 읽는 방법을 선택하십시오. 종종 사람들은 모든 잘못된 장소에서 성과에 대해 걱정하게됩니다.

나는 Armen에 동의하고, 물건을 돌려주고 널을 확인한다. 아주 간단하고 무슨 일이 일어나고 있는지 이해하기 쉽습니다.

+0

개체를 반환 할 예정이라면 세션에서 저장 하시겠습니까? 내가 묻는 이유는 사용자가 선택한 선택에 따라 나중에 이러한 세부 정보를 사용할 수 있기 때문입니다. 또는 필요한 경우 별도의 통화를 하시겠습니까? – hoakey

+1

웹 기반 응용 프로그램을 사용한다고 가정합니다.일반적으로이 상황에서는 세션의 메모리 캐시를 동기화하는 것을 어렵게 만드는 데이터베이스의 데이터를 수정할 수있는 외부 서비스가 있기 때문에 사용자 캐시 만 사용자 세부 정보를 저장합니다. 웹 요청시 데이터베이스에서 신선한 데이터를 얻는 것이 더 쉬웠습니다. 하지만 난 도전적으로 요청 수준에서 캐시 것입니다. – Brian

0

올바른 사용자/비밀번호 조합이 있는지 확인한 후 '사용자'테이블의 데이터가 필요없는 경우 두 방법 중 하나를 사용할 수 있으며 성능은 중요하지 않습니다.

다른 한편으로 유효한 사용자 이름/암호를 확인한 후에 사용자 세부 정보를 얻기 위해 두 번째 호출을 할 계획이라면 처음에 개체를 명확하게 반환하고 존재를 확인하기 위해 null을 확인합니다. 내 의견으로는 더 효율적인 전략.

1

아니라 모든과 옵션은 EF가 물질화의 높은 비용을 가지고 있으며, 객체 추적 변경하고 그 개체가 속성을 많이 가지고 발생하는 경우, 당신은 확실히 모든 사용을 고려해야하기 때문에 더 나은 될 것입니다 .

관련 문제