public long GetSessionSize()
{
long totalBytes = 0;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter b = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
MemoryStream m;
try
{
foreach (string key in Session)
{
//--- First add size of key
totalBytes += key.Length * 2;
//--- Next add size of object if it exists
Object x = Session[key];
if (x != null)
{
m = new MemoryStream();
b.Serialize(m, x);
totalBytes += m.Length;
}
}
}
catch { }
return totalBytes;
}
3条答案
按热度按时间ars1skjm1#
否,在这种情况下,您必须在将对象存储到会话之前计算对象,并确定总内存占用大小。请参阅此处了解如何获取对象大小
How to get object size in memory?
5w9g7ksd2#
我们需要查看存储在会话中的对象的大小。
在状态服务器中,您无法看到单个会话的大小。
但是,你可以在任务管理器中看到aspnet_state.exe的内存使用情况。我相信这足以确定你需要多少内存来安装新的服务器。
如果您需要非常详细的信息,则需要启动一个新的SQL Server (仅几小时到几天) 来存储会话状态,然后查询以下内容以获取各个会话状态对象-
其他想法
如果你正在创建一个全新的环境,我建议你看看StackExchange's Redis Cache,它也在WindowsAzure中使用。
fykwrbwg3#
使用此选项可获取存储在当前会话中的所有对象的大小: