2010-12-16 9 views
1

그래, ASP.NET 응용 프로그램이있어서 우리 페이지의 오버 헤드를 줄이기 위해 노력하고 있습니다 (사용자의 평균 PC 수명은 10 년입니다).ViewState 서버 측 이동

하나의 접근법은 ViewState 서버 측을 이동하는 것입니다. 우리는 많은 RAM을 가지고 있습니다. 좀 오래된 기능, 즉 ConfigurationManager가에 ScriptManager.RegisterHiddenField 및 ConfigurationSettings.AppSettings에 RegisterHiddenField을 업데이트했다 http://authors.aspalliance.com/robertb/articles.aspx?articleId=2

이가 칠년 전에 쓰여진 때문에 :

나는 여기에이 작업을 수행하는 가장 자주 인용 패턴을 따랐다. AppSettings.

이 그러나 최대한 빨리, 내가

Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: The state information is invalid for this page and might be corrupted. 

내가 하나를 각 페이지에 두 숨겨진 "__VIEWSTATE"필드가 지금 있다는 것을 발견 오류를 AJAX를 다시 게시 얻을 않는 한, 상당히 잘 작동하는 것 같다 그들 중 하나는 비어 있으며, 그 중 하나는 내 수업의 수치 값을가집니다. 이 문제와 관련이 있다고 생각합니다. 아마도 AJAX 업데이트는 값이있는 것 대신 빈 태그를 읽으려고합니다.

누구든지이 오류가 발생하는 이유를 알고 계십니까?

+0

사용자가 고대 컴퓨터를 가지고 있기 때문에 HTML 페이지에서 간단한 텍스트 값을 제거하려고하지만 AJAX 업데이트를 사용하고 있습니까 ??? –

+0

@Andrew : AJAX는 순수하게 성능이 뛰어납니다. (정확하게 사용 된 경우) – SLaks

+0

@SLaks - HTML에서 평범한 텍스트의 몇 킬로바이트를 초크 화하지 않는 비교적 현대적인 시스템에서 그렇습니다. 그러나 분명히 메모리가 거의없는 10 년 된 시스템에서 페이지에 숨겨진 소수의 K 데이터를 처리 할 수 ​​없습니까 ?? ViewState를 실제로 필요한 것만으로 제한하고 브라우저가 기본적으로 노약자로 여겨지는 경우 더 많은 '들어 올리기'를 요구하는 것을 중단하는 것이 훨씬 더 나은 최적화 기법입니다. –

답변

5

대답은 제공된 예제를 전혀 사용하지 않는 것입니다. 오래되고 시대가 오래되었으며 프레임 워크 자체가 제공하는 훨씬 나은 솔루션이 있습니다.

protected override PageStatePersister PageStatePersister 
{ 
    get { return new SessionPageStatePersister(this); } 
} 

난 그냥 내베이스 페이지 클래스와 짜잔에 그 4 개 라인 추가 - 인스턴트 ~ 30 %의 페이지 크기 감소를 그리고 그것은 AJAX 업데이트와 함께 잘 작동합니다.

+0

ViewState를 제거하지 않아도된다는 것을 알게되었습니다 :) –

+0

이렇게하면 페이지 크기가 크게 줄어 들었습니다. 페이지로드가 훨씬 빨라졌습니다/응답 성이 더 좋습니다. –

1

MS AJAX 프레임 워크에 새로운 서버 측 ViewState 메커니즘에 대해 알려주지 않았기 때문에 이러한 현상이 발생합니다. 새로운 값을 얻고 있습니다.이 값은 Session 오브젝트에서 어디서 찾을 수 있는지를 가리키는 간단히 다듬은 키입니다. AJAX 프레임 워크는 그것에 대해 아무것도 모릅니다.

ViewState 줄이기는 전혀 필요하지 않은 컨트롤에서 비활성화하면 쉽게 완료 할 수 있습니다. ASP.NET 4.0을 사용하는 경우 더 잘 수행 할 수 있습니다. 전체 페이지에서 기본적으로 사용하지 않도록 설정 한 다음 필요에 따라 활성화하십시오. http://www.hanselman.com/blog/MovingViewStateToTheSessionObjectAndMoreWrongheadedness.aspx

을 및 HTTP 압축을 사용

+0

흠,이 말이 맞습니다. 그러나, 나는 그 전체 계획을 포기하고 내장 된 .NET SessionPageStatePersister 클래스를 대신 사용했다. – msigman

+0

둘 다 할 수없는 이유는 없습니다. ViewState를 저장하는 위치와 상관없이 항상 IMO를 축소해야합니다. –