C# 4.0으로 작성된 간단한 Windows Forms 응용 프로그램이 있습니다. 응용 프로그램은 데이터베이스의 일부 레코드를 표시합니다. 이 응용 프로그램에는 사용자가 시작한 쿼리 옵션이 있습니다. 작업이 두 개의 열 작업 ID 및 상태Windows Forms 응용 프로그램의 중간 계층 캐싱
이 백그라운드 서비스 2로 업데이트되고 고려 으로 데이터베이스에
레코드는 우리가 호출 할 수있는 생산자 소비자 서비스와 같은 사실 일이다. 작업의 상태는 이러한 서비스가 실행되어 업데이트됩니다.
이제 데이터베이스에서 레코드를 쿼리 할 수있는 옵션이있는 사용자 (예 : 상태 (제출 됨, 처리 중, 완료 됨)에 따라 데이터를 쿼리합니다. 이로 인해 수천 개의 레코드가 생성 될 수 있으며 이러한 많은 데이터를 표시 할 때 GUI가 일부 성능 결함에 직면 할 수 있습니다.
따라서 쿼리 결과의 청크를 페이지로 표시하는 것이 중요합니다. 사용자가 수동으로 새로 고치거나 새 쿼리를 만들 때까지 GUI가 새로 고쳐지지 않습니다.
예를 들어. 작업은 서비스에서 지속적으로 업데이트되므로 작업 상태는 언제든지 달라질 수 있습니다. 페이지가 DB에서 가져온 시점의 데이터를 가져야한다는 기본 요구 사항.
DB에서 데이터를 가져 오는 데 LINQ to SQL을 사용하고 있습니다. 사용하기가 쉽지만이 요구를 충족시키기 위해 필요한 중간 수준의 캐싱은 없습니다. 프로세스 메모리를 사용하여 결과를 캐시하면 레코드 수가 매우 높을 경우 페이지 메모리를 극단적으로 늘릴 수 있습니다. 불행히도 LINQ는 DataContext 개체에 중간 계층 캐싱 기능을 제공하지 않습니다.
C# 4.0 + SQL Server + Windows 환경에서 페이징 메커니즘을 구현하는 가장 좋은 방법은 무엇입니까?
몇 가지 대안으로 캐시 된 결과를 임시로 저장할 수있는 중복 된 테이블/DB를 갖고 싶습니다. 또는 진취적인 응용 프로그램 라이브러리의 응용 프로그램 캐시 블록 사용. 나는 이것이 대부분의 개발자들이 직면하는 전형적인 문제라고 생각한다. 이 문제를 해결하는 가장 효율적인 방법은 무엇입니까? (참고 : 내 응용 프로그램과 DB는 동일한 상자에서 실행됩니다.)
답변을 주셔서 감사합니다, 나는 이것에 초보자입니다. 페이지 매김을위한 최적화 테이블과 인덱스에 대한 링크를 통해 도움을받을 수 있습니까? – sarat
인덱스를 만드는 방법은 [here] (http://msdn.microsoft.com/en-us/library/ms188783.aspx)이지만 몇 가지 웹 검색을 권장합니다. [SQL Server 인덱스] (https : //www.google.com/search? q = sql + server + indexes). – eulerfx