2012-01-10 5 views
0

Linq2Sql 사용시 저장 프로 시저에서 반환 된 Nullable<T> 필드를 처리하기 위해 메모리 및 CPU 시간을 고려한 모범 사례에 대한 제안을 찾고 있습니다. Nullable <T> 형식 저장 프로 시저에서 반환 된 처리하는 방법?

다음과 같은 시나리오 및 제한 사항을 고려하십시오 :

  1. 나는 코드에서 사방 fieldValue.HasValue 검사를 사용하지 않도록합니다. 따라서, 나는 모든 Nullable<T>을 기본 속성 (esp DateTime, Double, Int)으로 대체해야합니다.
  2. Nullable 유형 ~ 20 개의 필드가있는 1 백만 개의 개체를 읽을 것으로 예상됩니다.
  3. 메모리 및 CPU 사용은 중요한 고려 사항입니다.
  4. 요구 사항은 DataRow가 아닌 ​​객체에 저장된 proc를 가져와 Linq2Sql을 사용하는 것입니다.

비슷한 상황을 처리하는 데 의견이나 경험을 말하십시오.

관심을 가져 주셔서 감사합니다. 당신이 비에 데이터를 삽입 할 경우 (실제로는 그리 많은 것이있다), null 이외의 기본값을 설정 사용되는 각 유형에 대해

public static string SafeGetString(this SqlDataReader _Reader, int _ColIndex) 
{ 
    if (_Reader.IsDBNull(_ColIndex)) 
     return null; //Default value 
    else 
     return _Reader.GetString(_ColIndex); 
} 

: 당신 같은 확장 방법을 쓸 수

+0

입력란이 null 인 경우 어떻게 하시겠습니까? – msarchet

+0

LINQ to SQL은 어려운 핵심 요구 사항입니까?내가 묻는 이유는 오버 헤드가 있고 성능/메모리 이유로 저장 프로 시저 또는 쿼리를 실행하는 것이 가장 좋기 때문입니다. –

+1

"모든 것을 ... 기본값으로 바꿔야합니다." 그 제한이 있기 때문에 선택한 기본값이 실제 데이터 인 상황에서 데이터의 의미가 본질적으로 변경됩니다. 데이터에 유효한 값 (항상 논쟁의 여지가있는)이없는 경우 왜 처음에는 Nullable (또는 null 입력 가능 열)을 사용합니까? –

답변

2

최상의 솔루션 :

  • 은 SQL이 NULL 값을 반환하는 것을 허용하지 않습니다.

  • 이 작업을 수행하는 가장 쉬운 방법은 열 자체가 null이 될 수 없도록하는 것이지만 가능하지 않은 경우 반환하는 데 사용하는 쿼리에서 ISNULL (field, defaultvalue)을 수행 할 수 있습니다. 자료.

다음으로 좋은 해결 방법 :

  • 덮어 쓰기 LINQToSQL이 필드의 default(type) 값으로 설정되어 있지 않은 경우 다음 개체의 HasValue 있는지 확인하는 전화를받을 객체.

모든 값을 확인하지 않는 방법은 없습니다.

1

-nullable 유형입니다.

+0

동의합니다. 그러나 이것은 성능에 영향을 미칠 것입니다! null 체크를 사용하여이 메소드에 대한 20 개의 속성 (20M) 호출로 1M 행을 반복하는 것을 고려하십시오 !!! –

+2

@Amby 각 값을 확인하지 않는 유일한 방법은 SQL에서 null을 반환하지 못하도록하는 것입니다. – msarchet

+0

@Amby +1 유효한 포인트 또는 더 나은 아직 저장된 Procs 사용 안 함 – Jonathan

0

하드 코어 옵션은 소스에서 값을 병합하는 것입니다. 널 (null) 값이 데이터 독자로부터 멀어 지도록 보장합니다.

성능이 큰 관심사 인 것 같습니다. 코드 최적화 (지나치게 최적화 됨) 또는 런타임 오류 (메모리 남용)를 저지하기 전에 다양한 옵션을 측정하는 것이 좋습니다. cpu).

데이터베이스에서 수백만 행을 가져 오는 것이 가장 확실하게 어딘가에 영향을 줄 것입니다. 당신은 일반적으로 어디에/언제 그것이 덜 상처를 결정해야합니다!