虽然看起来“创建服务器控件”的“正确”方式是构造CreateChildControls调用中的所有子控件。但是由于很难知道什么时候会被调用(这是整个点作为性能优化),所以我在OnInit或OnLoad中看到我们的大部分开发人员都在构建它。这工作99%的案件。我们不得不使用CreateChildControls吗?当“必须”我使用asp.net CreateChildControls()?
4
A
回答
4
您应该始终在CreateChildControls中构建您的子控件。这是生命周期中初始化并将其添加到控制树的适当时间。其中一个原因是,许多时候调用EnsureChildContols方法,然后在必要时调用CreateChildControls。最佳实践,就这样做。
2
CreateChildControls方法被称为每当ASP.NET页面框架需要创建控件树,此方法调用不限于特定阶段在控制的生命周期。例如,可以在加载页面时,数据绑定期间或在渲染期间调用CreateChildControls。
0
性能方面,等待创建子控件将为您的服务器节省一些不必要的CPU时间。例如,如果引发异常或在调用CreateChildControls()之前中断了线程,则保存创建这些控件所需的时钟周期。
有什么理由说在OnInit中创建控件比在CreateChildControls()中更有效?
0
您将在Init或Load中创建控件,直到您编写需要重新创建控件的控件为止。
我发现最好是在CreateChildControls中创建控件,然后使用EnsureChildControls来控制确保在需要时创建它们。这使您可以通过将ChildControlsCreated设置为false来拆除控件,并在需要时再次重新创建它们。
相关问题
- 1. 我必须使用BreezeController吗?
- 2. 我必须使用循环
- 3. 我必须安装哪个SQL Server版本才能使用asp.net?
- 4. 我是否必须在ASP.NET中使用Viewstate
- 5. 当我必须使用最后的声明
- 6. 当我有svn @ sourceforge时,是否必须使用maven仓库?
- 7. epoll:我必须使用多线程
- 8. 我必须使用Form标签吗?
- 9. 我必须使用按钮吗?
- 10. 我必须使用多少个线程
- 11. Googe Maps:我必须使用Ionic Native吗?
- 12. 我必须使用wsgi_module的“def application”吗?
- 13. 我是否必须使用UNION insted JOIN?
- 14. 为什么我必须使用-lstdC++ fs?
- 15. 我必须使用连接表吗? [MYSQL]
- 16. 我必须使用Flash Media Encoder吗?
- 17. 我必须用根生产
- 18. ASP.NET C#必须声明
- 19. asp.net的DataReader,必须关闭
- 20. 我必须在python
- 21. 我必须在Blueprint.js
- 22. 当我在UITableView中实现-scrollViewDidScroll:UIScrollViewDelegate时,我必须调用super吗?
- 23. 当我们必须使用DebuggerDisplay属性?使用这个的优点是什么?
- 24. RadGrid覆盖CreateChildControls
- 25. 如果我想使用Hibernate和Annotation,我必须使用javax.persistence。*吗?
- 26. 验证必须使用XVAL
- 27. 是否必须使用SSL?
- 28. 我必须用我的活动
- 29. 我是否必须预编译asp.net mvc应用程序?
- 30. 使用问题,为什么我必须使用使用global :: MyName.SubName?
不,我说的是使用CreateChildControls更高效,因为可能避免不必要的工作。然而,有时候需要等一等,比如说base.OnLoad,因为它会得到一些数据,这些数据将决定你应该如何创建这些孩子。在这种情况下,由于您不知道何时会调用EnsureChildControls,因此无法将子级创建延迟至OnLoad之后。它工作,如果我只是在OnLoad中创建一切... – Xerion 2009-10-01 23:46:37
@ Xerion:足够公平。我不知道为什么你的CreateChildControls无法获取数据,但我确定有一些设计理由。 – JustLoren 2009-10-02 12:53:29
如果这是最好的论据,那是多么愚蠢的“优化”。谁在乎,如果请求需要150ms而不是149.5ms,如果它导致400/500 *这应该是罕见的*? – 2012-08-06 02:19:22