虽然看起来“创建服务器控件”的“正确”方式是构造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. 当我必须使用@section脚本?
- 2. 我必须使用BreezeController吗?
- 3. 我必须使用循环
- 4. 当我必须阻止我的演员?
- 5. 每次我用$ _我必须使用@
- 6. 当我必须使用__block时,ARC会告诉我吗?
- 7. 的CreateChildControls两次
- 8. 我是否必须在ASP.NET中使用Viewstate
- 9. 当我必须做setNeedDisplay或setNeedLayout?
- 10. 当我有svn @ sourceforge时,是否必须使用maven仓库?
- 11. 当我们必须在C#.Net中使用DBNull.Value,null和“”时,
- 12. 当我必须使用最后的声明
- 13. asp.net的DataReader,必须关闭
- 14. ASP.NET C#必须声明
- 15. 收件人必须从ASP.Net
- 16. 使用光标我必须更新表
- 17. epoll:我必须使用多线程
- 18. 我必须使用Flash Media Encoder吗?
- 19. 为什么我必须使用-lstdC++ fs?
- 20. 我必须使用django注册吗?
- 21. 我必须使用wsgi_module的“def application”吗?
- 22. 我必须使用ContinueWith和HttpClient吗?
- 23. 我必须使用什么trustlevel?
- 24. 我必须使用OpenAl for ogg文件
- 25. 我是否必须使用onPause/onStart/onDestroy
- 26. 我必须使用按钮吗?
- 27. 为什么我必须使用this.canvas?
- 28. 为什么我必须使用Sobel Operator?
- 29. Zend_Db_Table_Row:为什么我必须使用createRow()?
- 30. 我必须使用连接表吗? [MYSQL]
不,我说的是使用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