Search code examples
asp.netperformanceinitializationpageload

How do I avoid calling my initialization method repeatedly in ASP.NET?


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.
}

So, if I can't tuck my MyInit() in the if, can I solve my performance/strucktur problem with use of OnNeedDataSource()?


Solution

  • Not really sure if this is what you mean, but to initialise something once from Page_Load, you could use a static class with a static bool to determine if it's been initialized. Given it's on Page_Load, you'll also need to guard against multiple threads - so use a double checked lock to make it threadsafe and guard against a race condition.

    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;
                    }
                }
            }
        }
    }
    

    and in your Page_Load, call it via InitMe.MyInit()

    Hope that helps.