2009-09-24 7 views
1

Customer 개의 레코드가 수천 가지라고 가정하고 웹 양식에 표시해야합니다. 또한 하나의 CustomerEntity에는 10 개의 속성이 있습니다. 따라서 DataReader을 사용하여 데이터를 가져 와서 List<CustomerEntity>으로 변환하면 데이터를 두 번 반복해야합니다.대용량 데이터에 제네릭을 사용하는 것이 좋습니다.

그런 시나리오에서 제네릭을 사용할 수 있습니까? 그렇다면 내 응용 프로그램 성능은 무엇입니까? 예 :

예 :

CustomerEntity 클래스에서 고객 번호가 & 고객입니다. 그리고 난 내가이 두 루프를 피할 수있는 방법 코드

while (dr.Read()) 
    { 
     // creation of new object of customerEntity 
     // code for getting properties of CustomerEntity 
     for (var index = 0; index < MyProperties.Count; index++) 
     { 
     MyProperty.setValue(CustEntityObject,dr.GetValue(index)); 
     } 
     //adding CustEntity object to List<CustomerEntity> 
    } 

다음 쓴 한 목록을 준비하기 위해 다음 고객 테이블 에서 100 개 개의 레코드를 얻고있다. 그들의 다른 메커니즘은 무엇입니까?

+0

여분의 정보 –

답변

9

제네릭이 데이터 볼륨과 연결되는 방식을 잘 모르겠습니다. 그들은 서로 관련이없는 개념입니다 ... 또한 나에게 명확하지 않습니다 이 모든 것을 두 번 읽어야합니다. 하지만 그렇습니다 : 제네릭은 대량으로 사용하면 괜찮습니다 (왜 그렇게되지 않을까요?). 물론 문제를 발견하는 가장 좋은 방법은 프로파일 링 (서버 성능 또는 대역폭 - 아마도이 경우에는 후자)입니다.

더 좋은 방법은 다음과 같습니다. 웹 양식에 수천 개의 레코드를 표시하지 않습니다. 사용자가 그걸로 무엇을 할 것입니까? 페이징, 검색, 필터링, 아약스 등 모든 트릭을 상상할 수 있지만 수천 개의 레코드를 클라이언트에 보내지 마십시오.


업데이트 된 질문; 속성을 설정하는 루프가 반드시 나쁜 것은 아닙니다. 이것은 완전히 적합한 내부 루프입니다. 무엇이든하기 전에 프로파일이 인지 실제로 확인하려면 문제인지 확인하십시오. 나는 대역폭 (서버와 클라이언트, 또는 서버와 데이터베이스 사이)이 가장 큰 문제라고 생각합니다.

  • 스위치 (오히려 PropertyInfo보다) PropertyDescriptor를 사용하여, 그것은 훨씬 빨리
  • 쓰기 할 HyperDescriptor를 사용하여 해당 을 증명할 수 있다면이 루프 문제가 최적화 당신이 할 수있는 일이되는 것입니다 일을 할 수 DynamicMethod와 코드 - IL 일부 이해를 필요로하지만, 매우 빠른
  • 닷넷 3.5/LINQ Expression이 같은 행동을 할 쓰고 .Compile()를 사용 - (IMO) 좀 더 쉽게
  • 를 두 번째 점처럼하지만,

첫 번째 글 머리 기호와 세 번째 글 머리 기호의 예제를 추가 할 수 있습니다. 나는 정말로 그 코드 자신을 그런 식으로 쓰지 않을 것이기 때문에 두 번째 예제를 쓰고 싶습니다. 더 이상 (제 3의 옵션을 사용할 수 있다면 다른 곳에서는 사용할 수 없습니다).

+1

+1을 반영하여 대답을 업데이트했습니다. 검색에서 반환 된 모든 레코드를 표시하려고하는 클라이언트 요구 사항을 기억합니다. "최종 용도는 수백만 행이 될 것입니다 !!"(서버 부하는 신경 쓰지 마십시오.) –

+0

Datareader에서 하나의 루프가 실제 레코드를위한 것이고 다른 하나는 속성이없는 것이기 때문에 두 번 반복해야합니다. 이 루핑은 DataReader의 값을 List 로 설정하는 것입니다. 두 번째 요점은 받아 들일 만하다. 나는 기록을 낮출 수는 있지만 어떻게하면 루핑을 피할 수 있을까? 빠른 답장을 보내 주셔서 감사합니다. – Laxman

+0

@Laxman - 얼마나 많은 속성에 가치가 있는지요? –

0

성능이 될 것입니다 말하지만, 이러한 것들을 고려하는 것이 무엇 매우 어렵다 -

  1. 제네릭을 입력 제공을 saftey

    당신이 페이지에 10,000 레코드를 표시 위하여려고하는 경우에
  2. , 귀하의 응용 프로그램은 아마 사용할 수 없게됩니다. 레코드가 페이징되는 경우 실제 페이지에 필요한 레코드 만 반환하는 것이 좋습니다.

  3. 데이터를 두 번 반복 할 필요가 없습니다. 데이터로 무엇을하고 있습니까?

관련 문제