C# 重用昂贵的用户控件

C# 重用昂贵的用户控件,c#,asp.net,user-controls,reusability,C#,Asp.net,User Controls,Reusability,因此,我们有一个以树格式显示数据的遗留代码。它们使用间隔图像填充树的每个节点(…是的..呃) 不幸的是,这些图像的使用是由我们被迫使用的内部用户控件控制的(但基本上只是从Web.UI.WebControls.Image派生) 事实证明,我们有一棵巨大的树,有数千个节点,每一个节点都有四层或四层以上的深度。这意味着我们每次绘制页面时要创建大约10000个填充图像,这占用了相当多的时间 我现在的解决方案是静态地预先分配大量这些图像并使用它们。我希望当多个用户同时访问该页面时,不会出现任何不好的情况

因此,我们有一个以树格式显示数据的遗留代码。它们使用间隔图像填充树的每个节点(…是的..呃)

不幸的是,这些图像的使用是由我们被迫使用的内部用户控件控制的(但基本上只是从Web.UI.WebControls.Image派生)

事实证明,我们有一棵巨大的树,有数千个节点,每一个节点都有四层或四层以上的深度。这意味着我们每次绘制页面时要创建大约10000个填充图像,这占用了相当多的时间

我现在的解决方案是静态地预先分配大量这些图像并使用它们。我希望当多个用户同时访问该页面时,不会出现任何不好的情况


但是……有没有办法重用UserControl,这样我们就可以只创建一个映像实例,并以某种方式将其多次添加到控件集合中?我天真地尝试了一下,但没有成功。图像只绘制一次,对于第一次添加到其中的第一个控件(可能与INamingConainer的内容有关…?)

您是否考虑过将树的内容加载到后台线程中?

这只是一个想法,但您不能用不同的用户控件替换填充图像用户控件,例如:

public DivPadder : HtmlGenericControl
{
    public DivPadder() : base("div")
    {
        this.Style.Add("padding:10px");
    }
}

不幸的是,我认为这不会有多大帮助。问题在于总的页面加载时间和用户体验。生成这些10k图像控件在时间上占据主导地位。填充图像是由该控件动态创建的,还是它们只是指向某个位置托管的静态图像?控件实际上只是一个图像吗?或者它是否有任何特殊属性/css?