我正在尝试决定如何显示我的数据。我现在拥有的是中继器中展示的产品列表。但是对于代码维护,我将产品项目放入单独的UserControl中,并使用LoadControl将其加载到循环中。

产品控制本身非常简单,只是标题,URL,评级等一些公共属性,但我不确定这是否会影响我的性能。我在这里和论坛上进行了一些阅读,有人说这不是最好的做法,尤其是如果您拥有20或30个对照的情况。

因此,这真的是使用这种方法的性能打击还是每天命中率约为10.000次。也欢迎其他任何建议。

有帮助吗?

解决方案

我进行了一些测试,因为我也对此感兴趣,而且与实例化正常类相比,LoadControl的性能似乎相当重大。

我测试了创建100,000个简单类的实例,其中一个属性与100,000个实例负载加载新的空白控件。对于负载控制,类别为1950毫秒的类别为16ms。似乎有很多开销。我确实注意到,如果我在用户控制中添加了更多的组成控件,则加载时间上升了。 (这只是我实际上没有将控件添加到页面或渲染的负载)

对用户引人注目的打击足以引起人们的注意吗?除非您使用LoadControl加载大量实例,否则可能不会。

其他提示

我认为,为每种产品制作单独的用户控制可能不是最好的选择。

但是,您已经部分地是为了我的建议。

为什么不为您的产品上课,并在用户控件上已经定义的所有属性。

检索要显示的产品时,请检索产品集合(通过记录循环并创建集合)(例如列表),然后将集合用作中继器的数据源。

当您使用时 Page.LoadControl 在循环中,将其分为自己的功能,这将告诉 ASP.Net 缓存控件,而不是每次从磁盘上加载它。

示例:( VB)

Private Function LoadMyControl() As myCustomControl1
    Return Page.LoadControl("....")
End Function

然后...

For each [....]
   Dim myCtrl1 as myCustomControl1 LoadMyControl()
   myCtrl1.prop1 = "blah"
   myPlaceholder1.Controls.Add(myCtrl1)
Next

通过将其封装在函数调用中,缓存引擎认为它是相同的用户控件(它是),并且只能访问一次磁盘,从而显着加速。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top