确定在会话中使用ASP.NET中的哪些对象

时间:2010-08-17 19:13:45

标签: .net asp.net visual-studio optimization session

我继承了一个非常大的ASP.NET应用程序,需要修改它才能使用状态服务器而不是进程内会话。我需要在整个应用程序中跟踪会话中使用的所有类,然后确定它们是否可以序列化。是否有任何工具可用于分析代码以确定会话中使用的类?

2 个答案:

答案 0 :(得分:1)

在Visual Studio中,您可以使用通配符映射进行搜索,并搜索类似Session [* =。

的模式

另一种方法是在调试时使用立即窗口,并在导航您的站点后请求处于会话状态的内容。不完全证明,但它已经可以帮助。

另一种技术就是将会话状态设置为Sql Server或状态管理器模式(进程外),调试并查看如果对象无法序列化则开始抱怨的位置。与此同时,您还彻底测试了您的应用程序。

答案 1 :(得分:1)

您可以使用以下(C#)代码轻松获取当前会话对象的快照“快照”:

BinaryFormatter b = new BinaryFormatter();
StringBuilder debug = new StringBuilder();
MemoryStream m;

foreach (String s in Session.Keys) {
    // try to serialize the object
    var obj = Session[s];
    if (obj != null) {
        m = new MemoryStream();
        try {
            b.Serialize(m, obj);
            debug.AppendFormat("{0}: {1} bytes\n", s, m.Length);
        }
        catch (Exception ex) {
            debug.AppendFormat("ERROR: {0}, Message: {1}\n", s, ex.Message);
        }
    }
} 

然后在您喜欢的文本容器中显示“debug”字符串。

这很有用,因为简单地切换到State Manager / SQL Server确实会告诉你什么不能序列化,但它会停在第一个非序列化对象上。它也不会告诉你哪个键“拥有”该对象。

代码改编自this Stackoverflow answer