Il doit y avoir autre chose qui se passe. J'ai effectué quelques tests de performance sur TreeView et j'ai pu rendre une structure arborescente complexe contenant 5000 nœuds en bien moins de 40 secondes. Un arbre complexe de 2000 nœuds a été rendu en environ 3 secondes dans IE8. Si vous pouvez fournir plus de détails sur votre arbre, je pourrai peut-être vous aider davantage.
J'ai lu que la quantité de HTML rendu est l'un des facteurs les plus importants en ce qui concerne le temps de rendu sur un grand arbre. Même des choses simples comme la réduction de la longueur d'une chaîne d'URL en raccourcissant le nom d'une page (si vos nœuds sont liés directement à des pages) ou le remplacement des classes CSS par des techniques plus avancées d'utilisation des feuilles de style peuvent rendre le rendu considérablement plus rapide.
Voici mon code pour générer un arbre complexe aléatoire composé de _nodeCount
taille :
La page ASPX possède un TreeView nommé tv :
<asp:TreeView ID="tv" runat="server"></asp:TreeView>
Le code derrière ressemble à ce qui suit :
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);
}
Mise à jour 7/20
Vous pourriez peut-être prendre la logique de votre javascript pour définir les icônes et la déplacer dans le code .NET, ce qui devrait réduire considérablement le temps de chargement de la page. Cette page, http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx montre comment personnaliser le rendu d'un TreeNode ; cela pourrait être un bon point de départ pour vous.