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

发布于 2024-11-10 15:04:26 字数 334 浏览 4 评论 0原文

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() 解决我的性能/结构问题吗>?

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()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风透绣罗衣 2024-11-17 15:04:26

不太确定这是否是您的意思,但是要从 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() 调用它

希望有帮助。

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.

世界如花海般美丽 2024-11-17 15:04:26

试试这个:

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

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

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

HTH。

Try this:

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

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

I assume you are in a page or user control...

HTH.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文