Asp.net Web Forms,测试两个页面是否是同一个对象

时间:2015-04-21 15:59:07

标签: asp.net memory-management webforms

在追踪问题和阅读日志时,我注意到Onnload方法在某些情况下似乎被调用两次,这可能导致问题(基于页面生命周期的所有其他部分被监视)只被叫一次)。我想知道是否有一些值可以放入日志中,以确定它是否与调用OnUnload的页面相同。

标准对象比较不起作用,因为对象的某些值在调用之间被更改(可能导致我一直在跟踪的问题)。甚至一些不安全的代码也不会一直有效。

unsafe
    {
        object page = this;
        TypedReference tr = __makeref(page);
        IntPtr ptr = **(IntPtr**)(&tr);
        pointerValue = ptr.ToString();
    }

在相同页面的OnLoad和OnUnload事件中记录pointerValue只会导致某些时间匹配(约40%来自眼球)。

有没有办法明确告诉我是否正在处理相同的页面对象?

1 个答案:

答案 0 :(得分:0)

你所拥有的是正常的。我把它连接起来:

protected void Page_Load(object sender, EventArgs e)
{
    unsafe
    {
        object page = this;
        TypedReference tr = __makeref(page);
        IntPtr ptr = **(IntPtr**)(&tr);
        System.Diagnostics.Debug.WriteLine("LOADING: " + ptr.ToString());
    }
}

protected void Page_Unload(object sender, EventArgs e)
{
    unsafe
    {
        object page = this;
        TypedReference tr = __makeref(page);
        IntPtr ptr = **(IntPtr**)(&tr);
        System.Diagnostics.Debug.WriteLine("UNLOADING: " + ptr.ToString());
    }
}

当我多次刷新页面时,指针匹配:

LOADING: 284338068
UNLOADING: 284338068
LOADING: 352437184
UNLOADING: 352437184
LOADING: 284504276
UNLOADING: 284504276
LOADING: 352665628
UNLOADING: 352665628
LOADING: 284988092
UNLOADING: 284988092

您理解它是在呈现页面并将其发送到客户端之后卸载的服务器上的页面对象......对吗?这不是客户卸货。