오버헤드가 가장 낮은 데이터 테이블에서 일반 목록을 어떻게 얻을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1701539

  •  19-09-2019
  •  | 
  •  

문제

여기서 모범 사례를 찾고 있습니다.죄송합니다.주관적이라는 건 알지만 여기에는 똑똑한 사람들이 많기 때문에 이를 수행하는 "매우 좋은" 방법이 있어야 합니다.

Employee라는 사용자 정의 개체가 있습니다.해당 개체에는 이름, 전화, 이메일 등과 같은 7가지 속성이 있습니다.또한 내 SQL 데이터베이스에는 tblEmployees라는 테이블이 있는데, 이 테이블에는 다소 비슷한 레이블이 붙은 7개의 열이 있습니다.내 목표는 쿼리 결과를 Employee 개체의 일반 목록으로 "변환"하는 것입니다.이를 수행하는 가장 좋은 방법은 무엇입니까(가장 낮은 오버헤드, 가장 빠른)?

내가 현재 하고 있는 일은 웹 전체에서 제안된 것을 본 것입니다.페이지 로드 속도가 느려지는 것 같아서 마음에 들지 않습니다.일반 목록을 사용하면 작업 속도가 빨라지지만 고객이 대가를 지불하게 만드는 것은 기분이 좋지 않습니다.

내가 하고 있는 일은 다음과 같습니다.

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

'property = dr["column"]' 항목을 처리하는 DataRow(표시된 대로)를 사용하는 생성자가 있습니다.

당신의 생각을 기대합니다.

도움이 되었습니까?

해결책

코드를 간단히 살펴보고 사용 방법을 보지 않으면 목록 대신 ienumerator를 반환합니다. 그런 다음 수율 리턴 명령문을 사용할 수 있으며 목록을 두 번 반복하지 않습니다 (하나는 채울 수 있고 하나는 표시됩니다).

그래서...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

다른 팁

프로세스의 어느 부분이 느리다고 생각하십니까? 당신의 방법론에는 내가 볼 수있는 한 눈부신 성능 병목 현상이 없습니다.

LINQ2SQL 또는 엔티티 프레임 워크와 같은 또는 맵퍼를 사용하는 것이 좋습니다.

목록을 작성하는 이유는 서버 측의 기능 사이를 전달하는 것입니다.

데이터 세트 참조 또는 데이터 가능성을 전달하는 것과는 달리 목록을 전달하면 어떤 이점이 있습니까?

그 생각은 제쳐두고, 현재하고있는 일은 목록을 구축하기위한 표준 절차입니다. 속도를 어떻게 올릴 수 있다고 생각하십니까? 직원 대상을 제정하지 않음? 그런 다음 직원 개체 없이는 엔티티 모델링을 엉망으로 만들어야합니다.

지금 하고 있는 일은 어떤 시점에서는 어떤 식으로든 수행해야 하는 작업이며, 실제로 설명했던 방식보다 훨씬 더 빠르게 수행할 수는 없습니다.하지만 데이터를 캐싱하면 해당 작업을 수행해야 하는 횟수를 줄일 수 있습니다.

고객 목록을 캐시에 저장합니다.예를 들어 애플리케이션 시작 시 이를 채웁니다.고객 기록이 변경되면 캐시를 업데이트하고 해당 기록을 데이터베이스에 저장합니다.모든 사용자의 모든 읽기는 데이터베이스가 아닌 캐시로 이동됩니다.

이 접근 방식은 일반적으로 데이터베이스에 적용되는 어떤 접근 방식보다 훨씬 빠릅니다.

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