Должно быть что-то еще происходит. Я провел некоторое тестирование производительности на TreeView и смог отобразить сложную древовидную структуру, содержащую 5000 узлов, за гораздо меньшее время, чем 40 секунд. Сложное дерево 2000 узлов визуализируется за 3 секунды в IE8. Если вы можете предоставить более подробную информацию о вашем дереве, возможно, я смогу предоставить дополнительную помощь.
Я читал, что количество отображаемого HTML является одним из самых важных факторов, когда речь идет о времени рендеринга на большом дереве. Даже такие простые вещи, как уменьшение длины строки URL-адреса путем сокращения имени страницы (если ваши узлы ссылаются непосредственно на страницы) или замена классов CSS более продвинутыми методами использования таблиц стилей, могут сделать это значительно быстрее.
Ниже приведен мой код для генерации случайного комплексного дерева размером _nodeCount
:
Страница ASPX имеет TreeView с именем tv:
<asp:TreeView ID="tv" runat="server"></asp:TreeView>
Код сзади выглядит следующим образом:
private Random _rand = new Random();
private int _nodeCount = 2000;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//create a big tree
var itemCount = 0;
while (itemCount < _nodeCount)
{
//create a parent item
var n = new TreeNode("Node " + itemCount.ToString(), itemCount.ToString());
itemCount++;
tv.Nodes.Add(n);
CreateSubItem(n, ref itemCount);
}
}
}
protected void CreateSubItem(TreeNode parent, ref int itemCount)
{
//chance that we won't create a sub item
if (_rand.Next(2) == 1 || itemCount > _nodeCount)
{
return;
}
var n = new TreeNode("Child Node " + itemCount.ToString(), itemCount.ToString());
itemCount++;
parent.ChildNodes.Add(n);
CreateSubItem(n, ref itemCount);
CreateSubItem(parent, ref itemCount);
}
Обновление 7/20
Возможно, вы могли бы взять логику в своем javascript для установки значков и переместить ее в код .NET, это должно значительно сократить время загрузки страницы. На этой странице http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx, показано, как настроить отображение TreeNode; может быть, это может быть хорошей отправной точкой для вас.