如何避免在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.
}
因此,如果我不能将ѭ1uck塞在
if
中,可以使用
OnNeedDataSource()
解决我的性能/吃力问题吗?     

解决方法

        并不是很确定这是否意味着您的意思,但是要从Page_Load初始化一次,可以使用带有静态布尔值的静态类来确定它是否已初始化。鉴于它位于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()
调用它 希望能有所帮助。     ,        尝试这个:
protected override void OnLoad(EventArgs e)
{
   base.OnLoad(e);

   if (!Page.IsPostBack) { MyInit(); }
}
我假设您在页面或用户控件中... HTH。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...