1

我正在尝试决定如何显示我的数据。我现在拥有的是中继器中显示的产品列表。但是对于代码维护,我将我的产品项放在单独的用户控件中,并使用 LoadControl 将它们加载到带有 db 结果的循环中。

产品控件本身非常简单,只有一些公共属性,如标题、网址、评级,但我不确定这是否会影响我的性能。我在这里和论坛上做了一些阅读,有些人说这不是最佳做法,特别是如果你有超过 20 或 30 个这些控件。

那么,使用这种方法是否真的会影响性能,或者每天大约 10.000 次点击是否可以保持正常。也欢迎任何其他建议。

4

3 回答 3

2

我做了一些测试,因为我也对此感兴趣,并且与实例化普通类相比,LoadControl 似乎对性能有相当大的影响。

我测试了创建一个具有一个属性的简单类的 100,000 个实例与加载一个新的空白控件的 100,000 个 loadcontrol 实例。类是 16 毫秒,负载控制是 1950 毫秒。似乎有很多开销。我确实注意到,如果我向用户控件添加更多组成控件,加载时间就会增加。(这只是我没有实际将控件添加到页面或呈现它们的负载)

是否足以引起用户注意?除非您使用负载控制加载大量实例,否则可能不会。

于 2010-10-12T21:16:05.890 回答
0

我认为为每个产品制作单独的用户控件可能不是最好的方法。

但是,您已经部分满足了我的建议。

为什么不为您的产品创建一个类,其中包含您已经在用户控件上定义的所有属性。

当您检索正在显示的产品时,检索产品的集合(遍历记录并创建集合)(例如列表),并将集合用作中继器的数据源。

于 2010-10-12T18:54:06.310 回答
0

当您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

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

于 2016-09-21T04:55:04.407 回答