如何避免在ASP.NET中重复调用我的初始化方法?

时间:2011-05-28 00:48:30

标签: asp.net performance initialization pageload

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) { // sadly, **never** in here   }

    MyInit() // Slow initialization method, that I only wan't to call one time.
}

所以,如果我无法将MyInit()收入if,我是否可以使用OnNeedDataSource()解决我的表现/打击问题?

2 个答案:

答案 0 :(得分:1)

不确定这是不是你的意思,但是为了从Page_Load初始化一次,你可以使用带有静态bool的静态类来确定它是否已被初始化。鉴于它在Page_Load上,你还需要防范多个线程 - 所以使用双重检查锁来使其线程安全并防止竞争条件。

public static class InitMe
{
    private static bool isInitialized = false;
    private static object theLock = new Object();

    public static void MyInit()
    {
        if(!isInitialized)
        {
            lock(theLock);
            {
                if(!isInitialized)    // double checked lock for thread safety
                {
                    // Perform initialization
                    isInitialized = true;
                }
            }
        }
    }
}

并在您的Page_Load中,通过InitMe.MyInit()

进行调用

希望有所帮助。

答案 1 :(得分:0)

试试这个:

protected override void OnLoad(EventArgs e)
{
   base.OnLoad(e);

   if (!Page.IsPostBack) { MyInit(); }
}

我假设您在页面或用户控件中......

HTH。