2009-08-24 2 views
6

어떤 이유로 내 응용 프로그램의 viewstate가 거대하게되었습니다 (약 1,400 만 자). 그것은 약 1 분의 로딩 시간을 더합니다. 페이지가 마침내로드되는 경우 (종종 그렇지 않음) "Post size exceeded allowed limits."숨겨진 필드를 크게 보아서 모든 것이 충돌하게 만듭니다.

갑자기 나타 났기 때문에 누군가가 양식을 보낼 때마다 서버가 충돌합니다. 나는 어떤 필드도 추가하지 않았다. 단지 페이지의 일부 자바 스크립트.

사람들은 viewstate chunking을 확인하라고 나에게 말했다. 구글은이 일을 나에게 말했다 :

<pages maxPageStateFieldLength="1024"> 

... 그래서 지금 내가 지금 100 개 매우 큰 숨겨진 필드와 같은 뭔가를 대신 거대한 숨겨진 필드의. 내가 찾던 것이 정확하지 않습니다.

.NET은 왜 이렇게합니까? 이 문제를 어떻게 해결할 수 있습니까?

+0

몇 가지 컨트롤에 대해 viewstate를 끌 수있는 기회가 있으십니까? –

+2

페이지를 보지 않고 말하기는 어렵지만 viewstate 디코더를 사용하여 viewstate에 포함 된 내용을 확인하십시오. 그리드/테이블의 viewstate가 필요하지 않으면 IIS의 gzip을 켜는 것 외에도 압축 된 viewstate를 구현해야합니다. –

+0

컨트롤은 입력 필드이며 많은 코드를 다시 작성해야하는 경우에도 해당 컨트롤에 대한 viewstate를 해제 할 방법이 없습니다. 또한 10 개의 필드가 있습니다. 그렇게 나쁜 것이 아닙니다 ... 맞습니까? – marcgg

답변

7

나는 당신이 그 안에 실제로 무엇을 생각 얻을 수 있도록 viewstate가를 디코딩하는 유틸리티를 사용하는 것이 좋습니다 것입니다 (당신은 분명 거기에 많은 정보를 가지고 있기 때문에 당신이 필요로하지 않는 것입니다.)

viewstate decoder을 사용하면 기대하지 않는 viewstate의 내용을 볼 수 있습니다. 그런 다음 코드를 수정하거나, 문제가되는 컨트롤을 제거하거나, 활성화되어 있지 않아야하는 컨트롤에 대해 viewstate (EnableViewState="false" 특성 사용)를 선택적으로 비활성화 할 수 있습니다.

+0

감사합니다. 꽤 멋지게 보입니다. 지금 당장 시험해 보겠습니다. – marcgg

+0

그건 성가신 일입니다. 소프트웨어가 충돌합니다. 분명히 문자열이 너무 큽니다. 하지만 이제는 내 viewstate가 13 428 604 자임을 알고 있습니다 :) – marcgg

+0

드디어 내 다섯 번째 시도에서 충돌하지 않고 실행되었습니다. 그것은 viewstate에 내 페이지를 모두 넣는 것처럼 보입니다 ... 아주 이상합니다. 나는 논리가 무엇인지 여기에서 보려고 노력할 것이고, 다시 돌아올 것이다 – marcgg

3

컨트롤은 viewstate없이 포스트 백간에 값을 유지합니다. 종종 문제없이 많은 컨트롤에 대해 viewstate를 비활성화 할 수 있습니다. 특정 제어 세트에 대한 viewstate가 비활성화하려면 :

EnableViewState="false" 

당신이 당신의 그리드와는 상당히 크기를 줄일 당신이 viewsate을 필요로하지 않는 모든 컨트롤이 설정합니다.

+0

나는 이것을했고 그것은 아무 것도 바뀌지 않았다. 나는 포함하고있다.ascx 파일은 다음과 같습니다 : 그것은 연결될 수 있습니까? 나는 이것들을 위해 viewstate를 무력화 시켰고 그것을 고치지 않았다. – marcgg

+0

나는 그것을 이해했다 (받아 들여진 대답을 보라)! 나는 그것이 문제를 파악하는 데 도움이 되었기 때문에 beska 's를 받아 들였지만 당신도 역시 도움이되었다 ... 그래서 +1하고 대단히 감사합니다 :)! – marcgg