2010-02-12 2 views
3

Linq-To-SQL 클래스로 백업 된 ODS (ObjectDataSource)를 사용하여 내 페이지에서 Gridview를 채 웁니다.EnableCaching = true 인 ObjectDataSource로 페이지 매김 및 정렬 최적화

성능 고려 - GridView의 Viewstate를 사용하지 않도록 설정하고 ODS에서 캐싱을 사용하도록 설정했습니다.

필자는 또한 Linq-to-SQL 클래스의 Search 메서드를 .skip &.take 메서드를 사용하여 레코드의 '페이지 넘치는'레코드 만 가져 오도록 최적화했습니다.


이제 ODS는 캐싱으로 인해 자체적으로 레코드 세트를 '정렬'할 수 없습니다. 이 스레드에 설명 된대로 :

GridView sorting doesn't work when I Enable Caching in Custome Paging and sorting

사람들은 '비교 자'를 사용자 정의 종류 사용하고 구현하는 것이 좋습니다하지만 이건 내 성능 이점 유적 생각합니다.

http://forums.asp.net/t/1344883.aspx

나는 정렬하는 동안 DB-여행을 할 준비가하지만 어떻게 분리하는 것을 캐싱 턴 - 온되면?

참고 :이 Gridview (EnableViewstate = false) 및 ODS (EnableCaching = true)가있는 AJAX 업데이트 패널이 이미 있습니다. 희망은 내가 올바른 길을 가고있다 ... 제안은 감사하겠습니다.


나는 (즉, 개체의 제네릭 컬렉션 정렬 수 있도록 별도의 방법을 추가 할 것입니다)이 '맞춤 종류'를 사용하여 응용 프로그램 측에서 정렬을 수행했습니다. 이 솔루션은 DB에서 모든 레코드를 가져 와서 정렬을 수행해야하므로 받아 들일 수 없습니다!

첫째, 앱이 더 좋게/더 빨리 정렬 할 수 있다고 생각하지 않습니다. 그리고 두 번째로 - 최적화 된 페이지 매김으로 인해 얻는 전체 성능 이점이 폐색됩니다. - 레코드의 '페이지 넘김'만 가져 오기 위해 .skip() 및 .take() LINQ 메서드를 사용하고 있습니다.

글쎄, 마침내 나는 내 자신의 픽스를 발명해야만했다. 그것은 나의 종류 시나리오에 국한 될 수 있지만 확실히 많이 그 숫자는 입니다. 페이지 매김 최적화는 데이터 캐싱뿐만 아니라 으로 유지됩니다.

내 솔루션 : 나는 GRIDVIEW의 '정렬'이벤트를 도청 한 . ODS가 캐시 된 데이터에서 자체적으로 정렬 작업을 수행하도록 허용하면 '사용자 정의 정렬'오류가 발생합니다. 그 대신에, 이제 나는 수동으로 정렬을 수행하고 정렬 이벤트를 취소합니다. 이를 위해 ODS에서 'orderBy'매개 변수를 명시 적으로 지정하고 Gridview의 'Sorting'이벤트에서 새 정렬 표현식으로 설정해야합니다.이 그리드를 새로 고침하고 마지막에 내가 할 :

odsOrganization.SelectParameters["orderBy"].DefaultValue = GetSortExpr(e.SortExpression); 
... 
e.Cancel = true; 
  • 이 (내가 이미 이벤트를 취소 전에 수행 한 - 위와 같이) 정렬 취소 할 ODS를 알려줍니다. ITs 처럼 나는 ODS를 속이며 처리 중임 백그라운드에서 정렬. 그리고 을 ODS에게 보내어 'SelectParameters [ "orderBy"]'가 으로 변경되었음을 감지하고 다시 한 번 선택을 수행합니다. . I 이전 유형 은 자동으로 'odsOrganization.SelectParameters [ "orderBy"]에 저장됩니다. 반복에서 사용할 수있는 DefaultValue' .

나는 여전히 업데이트하여 매개 변수의의 DefaultValue ODS 데이터를 가져 오기 위해 돌아갑니다 것을이 하나를 테스트하지만 놀라운거야. 이렇게하면 사용자가 정렬 (다른 작업을 위해 캐시에서 데이터를 가져옴)을 수행하고 정렬하기 위해 DB로 돌아갈 때까지 캐시가 보존됩니다. 그것이 나를 위해 일하기를 바란다!

+0

아무도 도와 줄 수 없습니까? –

답변