Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET中调用和读取会话对象需要多少资源?_Asp.net_Performance_Optimization - Fatal编程技术网

在ASP.NET中调用和读取会话对象需要多少资源?

在ASP.NET中调用和读取会话对象需要多少资源?,asp.net,performance,optimization,Asp.net,Performance,Optimization,我想知道像以下示例那样调用会话对象有多浪费: string test = string.Empty; for (int i = 0; i < 1000; i++) { test += Session["test"].ToString() + ","; } 而不是像这样: string test = string.Empty; string test_session_value = Session["test"].ToString(); for (int i = 0; i <

我想知道像以下示例那样调用会话对象有多浪费:

string test = string.Empty;
for (int i = 0; i < 1000; i++)
{
   test += Session["test"].ToString() + ",";
}
而不是像这样:

string test = string.Empty;
string test_session_value = Session["test"].ToString();
for (int i = 0; i < 1000; i++)
{
   test += test_session_value + ",";
}
这就是调用HttpSessionState对象并多次从中读取会话,而不是尽可能少地读取


是否有明显的性能损失?开发人员在使用HttpSessionState对象时应该注意多少?

如果会话状态存储在IIS中,那么它将创建庞大的IIS

如果会话状态存储在Sql server中,则不同应用程序域之间的数据传输将耗费大量时间

优点: 1.您可以跨多台计算机访问相同的会话状态。 2.重新加载应用程序池后,相同的会话状态可用

缺点: 1.比进程模式慢。 2.会话状态中的所有对象都必须是可序列化的。
3.由于会话变量可以动态创建、随时使用,并且不需要开发人员显式地处理它们,因此过度使用会话变量可能会导致非常不可读和不可维护的代码。

如果会话状态存储在IIS中,则会创建大量的IIS

如果会话状态存储在Sql server中,则不同应用程序域之间的数据传输将耗费大量时间

优点: 1.您可以跨多台计算机访问相同的会话状态。 2.重新加载应用程序池后,相同的会话状态可用

缺点: 1.比进程模式慢。 2.会话状态中的所有对象都必须是可序列化的。
3.由于会话变量可以动态创建、随时使用,并且不需要开发人员显式地处理它们,因此过度使用会话变量可能会导致代码非常不可读和不可维护。

页面加载时会话完全可读,页面卸载时会保存会话。因此,序列化和取消序列化在每页只发生一次

会话将数据保存/保留在字典对象中

所以当你做这个的时候

string test = string.Empty;
for (int i = 0; i < 1000; i++)
{
   test += Session["test"].ToString() + ",";
}
是否有任何性能处罚

在现实生活中,我不认为您每页调用1000次会话变量,所以它不会明显延迟会话。值得注意的是,在页面加载和卸载之前,会话将锁定所有用户


相对:

当页面加载时,会话是完全读卡器,当页面卸载时,会话被保存。因此,序列化和取消序列化在每页只发生一次

会话将数据保存/保留在字典对象中

所以当你做这个的时候

string test = string.Empty;
for (int i = 0; i < 1000; i++)
{
   test += Session["test"].ToString() + ",";
}
是否有任何性能处罚

在现实生活中,我不认为您每页调用1000次会话变量,所以它不会明显延迟会话。值得注意的是,在页面加载和卸载之前,会话将锁定所有用户

亲属: