Повторное использование дорогих пользовательских элементов управления - PullRequest
2 голосов
/ 22 июля 2010

Итак, у нас есть этот устаревший код, который отображает данные в древовидном формате. Они дополняют каждый узел дерева, используя изображения-проставки (... yup..ugh)

К сожалению, использование этих изображений контролируется внутренним UserControl, который мы вынуждены использовать (хотя, в основном, он происходит от Web.UI.WebControls.Image).

Что ж, получается, что у нас ОГРОМНОЕ дерево с тысячами узлов, каждый на четыре уровня глубиной или более. Это означает, что мы создаем около 10 000 изображений-заполнителей каждый раз, когда рисуем страницу, что занимает довольно много времени.

Мое решение сейчас состоит в том, чтобы статически предварительно выделить большое количество этих изображений и использовать их. Я надеюсь, что при одновременном доступе к странице сразу нескольких пользователей не возникнет никаких неприятностей.

Однако ... есть ли способ повторно использовать UserControl, чтобы мы могли создать просто ОДИН экземпляр экземпляра Image и каким-то образом добавить его несколько раз в коллекции Controls? Я попробовал это наивно, и это не сработало. Изображение рисуется только один раз, для первого элемента управления оно добавляется в первый раз (возможно, что-то связанное с материалом INamingConainer ...?)

Ответы [ 2 ]

2 голосов
/ 22 июля 2010

Просто идея, но вы не можете просто заменить пользовательский элемент управления Padding Image другим пользовательским элементом управления, например:

public DivPadder : HtmlGenericControl
{
    public DivPadder() : base("div")
    {
        this.Style.Add("padding:10px");
    }
}
0 голосов
/ 22 июля 2010

Рассматривали ли вы загрузку содержимого дерева в фоновом потоке?

...