2012-07-27 3 views
0

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는 동일한 상자에서 실행됩니다.)

답변

1

캐싱은 성능을 향상시키는 확실한 방법이지만 캐싱 전략을 올바르게 구현하는 것이 더 어려울 수 있습니다. 문제는 캐시 만료를 관리하거나 기본적으로 캐시가 원하는 정도로 동기화되는지 확인하는 것입니다. 따라서 캐싱을 고려하기 전에 먼저 캐싱을 고려해야하는지 고려하십시오. 질문에서 수집 할 수있는 것을 바탕으로 데이터 모델이 비교적 간단하고 조인이 필요없는 것처럼 보입니다. 그렇다면 왜 페이지 매김을 위해 테이블과 인덱스를 최적화하지 않을까요? SQL Server와 Linq To SQL은 수천 건의 레코드에 대한 페이지 매김을 투명하고 산들 바람으로 처리합니다.

한 번에 너무 많은 레코드를 표시하는 것이 GUI에서는 금지되어 있으며 사용자에게는 금지되어 있습니다. 사용자는 주어진 시간에 화면을 채우는 것보다 많은 기록을보고 싶지 않습니다. 사용자가 요청할 때까지 데이터를 새로 고칠 필요가 없다는 제약이 주어지면 쿼리 수가 상대적으로 낮을 것이라고 가정하는 것이 안전해야합니다. 응용 프로그램과 동일한 상자에 DB가 있다는 추가 제한 조건은 캐싱이 필요하지 않은 지점을 더욱 강화시킵니다. SQL 서버는 이미 내부적으로 캐싱합니다.

성능 조정에 대한 모든 조언은 최적화를 시도하기 전에 성능을 프로파일 링하고 측정해야한다고 말합니다. Donald Knuth의 상태로, 조숙 한 최적화는 모든 악의 뿌리입니다.

+0

답변을 주셔서 감사합니다, 나는 이것에 초보자입니다. 페이지 매김을위한 최적화 테이블과 인덱스에 대한 링크를 통해 도움을받을 수 있습니까? – sarat

+0

인덱스를 만드는 방법은 [here] (http://msdn.microsoft.com/en-us/library/ms188783.aspx)이지만 몇 가지 웹 검색을 권장합니다. [SQL Server 인덱스] (https : //www.google.com/search? q = sql + server + indexes). – eulerfx

관련 문제