问题描述
|
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。