2013-03-02 1 views
1

나는 Viewstate의 과도한 사용으로 인해 페이지가 덤프되는 방법에 대한 많은 기사를 읽었으며 쉼표로 구분 된 3 ~ 4 단어의 문자열을 사용하고 분할하는 것이 확실하지 않습니다. 배열에 검색을위한asp.net + viewstate 및 쉼표로 구분 된 문자열

string s = 'john,23,usa'; 
string[] values = s.Split(','); 

내가 내 동료의 대부분은 아마도 페이지 로딩 성능을 개선하기 위해 노력하고 있음을 일을 본 것처럼 도움이 될 것입니다. 누구든지 조언 할 수 있습니까?

답변

4

실제로 어떤 경우에는 차이가 있지만 힘들고 종종 관련성이없는 것처럼 보입니다.

예제는 의미 바이트 ViewState 크기를 표시하는 68 바이트 ViewState에 어떤 결과가없는 페이지 :
는 아래의 경우를 참조하십시오. 그 외 모든 것은 ViewState에 수동으로로드 된 콘텐츠입니다.

ViewState에 0..9999의 문자열 값을 넣는 것.

string x = string.Empty; 

for (int i = 0; i < 10000; i++) 
{ 
    if (i != 0) x += ","; 

    x += i; 
} 

//x = "0,1,2,3,4,5,6,7,8...9999" 
ViewState["x"] = x; 

//Result = 65268 bytes 

및 배열

하십시오 65,260 바이트 ViewState 결과 상기

string[] x = new string[10000]; 

for (int i = 0; i < 10000; i++) 
{ 
    x[i] = i.ToString(); 
} 

ViewState["x"] = x; 

//Result = also 65268 bytes 

두 경우는 오버 라이딩 SaveViewState 방법에 돌아온. ViewState 개체에서로드하는 것보다 8 바이트 더 적습니다. 이 페이지 SaveViewState 방법 오버라이드 (override)하는 경우

//104 bytes 
ViewState["x"] = "1,2,3,4,5,6,7,8,9,10" 

// 108 bytes 
ViewState["x"] = new string[] { "1", "2", "3" , "4", "5", "6", "7", "8", "9", "10"} 

는 :

그러나, 다른 경우에는 어떤 경우에는 ViewState으로

protected override object SaveViewState() 
{ 
    //100 bytes 
    return new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; 

    //100 bytes 
    return "1,2,3,4,5,6,7,8,9,10"; 
} 

가 암호화되고 Base64 encoded,을 그것은 단지 문제가 될 수 문자열 인코딩 : 두 개의 다른 객체가 페이지에 두 개의 다른 출력을 생성합니다.