asp.net + Viewstate和逗号分隔的字符串

时间:2013-03-02 18:40:30

标签: c# asp.net viewstate

我已经阅读了很多关于页面如何因过度使用Viewstate而陷入困境的文章,我不确定是否使用逗号分隔的字符串,可能有3-4个单词并将其拆分为数组

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

用于检索将有所帮助,因为我已经看到许多同事正在尝试提高页面加载性能。有人可以建议吗?

1 个答案:

答案 0 :(得分: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

使用数组:

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。比在ViewState对象上加载少8个字节。

然而,在其他一些情况下:

//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,在某些情况下,可能只是字符串编码两个不同的对象生成两个不同的输出到页面。