1

Viewstate の過度の使用によってページがどのように機能しなくなるかについての多くの記事を読んだことがありますが、おそらく 3 ~ 4 語のカンマ区切りの文字列を使用して配列に分割するかどうかはわかりません

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

私の同僚の多くがおそらくページ読み込みのパフォーマンスを改善しようとしてそうしているのを見たので、検索は役に立ちます。誰でもアドバイスできますか?

4

1 に答える 1

4

実際、場合によっては違いが生じることもありますが、扱いが難しく、多くの場合、無関係に思えます。
以下のケースを参照してください。

例ではViewStateサイズがバイト単位で示されています。つまり、何もないページの結果は 68 バイトになりますViewState。それ以外はすべて、手動で にロードされたコンテンツですViewState

に 0..9999 の文字列値を設定しViewStateます。

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

そして配列で:

string[] x = new string[10000];

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

ViewState["x"] = x;

//Result = also 65268 bytes

上記のどちらの場合も、オーバーライド可能なメソッドViewStateで返されると 65260 バイトになります。SaveViewStateオブジェクトにロードするよりも 8 バイト少なくなりViewStateます。

ただし、他のケースでは次のようになります。

//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"} 

ページSaveViewStateメソッドをオーバーライドする場合:

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";
}

ViewStateは暗号化されているためBase64 encoded,、場合によっては、ページに 2 つの異なる出力を生成する 2 つの異なるオブジェクトをエンコードする文字列の問題である可能性があります。

于 2013-03-02T20:04:42.683 に答える