用于动态显示和隐藏控件的aspx和cs文件中代码的性能差异

时间:2011-02-18 15:00:02

标签: asp.net performance

当我使用代码在使用分隔符或cs文件中隐藏aspx页面中的某些控件时,我正在考虑性能。

例如 如果我有一个面板并且我希望它在某些条件下显示,那么我可以通过两种方式实现这一点

1:在aspx文件中使用代码,类似这样的

<% if(isAllowed) { %>

<asp:Panel ...></asp:Panel>

<% } %>

2:在代码文件中,类似这样的

<asp:Panel ID="pnlMyPanel" Visible="false"></asp:Panel>

在cs文件中

if(isAllowed)
  pnlMyPanel.Visible=true;

在我看来,第一种方式应该是好的,因为它根本不会在页面中创建任何Panel。 我在这里纠正吗?

请指导我哪种方法更可取

3 个答案:

答案 0 :(得分:0)

老实说,我不知道哪个更快,但我怀疑这种差异会对你的应用程序的性能产生任何明显的影响。

答案 1 :(得分:0)

如果按性能表示由页面生成的最终HTML的大小,则在这两种情况下都不会呈现HTML代码,因此不会影响页面权重。为了可维护性,我建议将其放在cs中,这样下一个人更容易遵循逻辑流程。

答案 2 :(得分:0)

前一段时间,我开始沉迷于创建只加载他们所需内容的表单,例如:使用Page.LoadControl()加载子控件。我逐渐意识到,在事件生命周期和参考可用性方面所产生的麻烦并非不可克服,但是太麻烦了,以至于我花费的时间远远超过了我想要处理它的时间。

所以我不再这样做了。这很好。

我学到了一个宝贵的教训:除非您有性能问题,否则不要担心。

计算能力很便宜,大多数情况下的大多数网站都不会遇到性能问题。因此,编写易于理解和维护的代码,然后担心优化何时(更有可能,如果)性能成为问题。

所以要回答你的问题,无论哪个更快,请在cs中执行此操作:

pnlMyPanel.Visible = isAllowed;

顺便说一下,在这个和使用“if ...”构造之间有一个重要的区别,只有当你的条件成立时才能将它设置为可见。

由于默认情况下启用了ViewSate,因此如果将面板设置为可见,则无论isAllowed条件是否为假,它都将在后续回发中保持可见状态。所以我建议养成总是分配可见性以形成有条件可见的元素的习惯。这也意味着您永远不必担心在标记中设置Visible和EnableViewState属性。