I've found two bottlenecks in RadTreeView control.
The first one is in RadTreeViewRenderer.GetContextMenusHtml() where you use string concatenation instead of StringBuilder. By switching to StringBuilder I got about 5 seconds off, when generating html for 1500 elements.
The second bottleneck is in RadTreeViewXmlParser.GetNodeXml() where you place the TypeDescriptor.GetProperties(node) call inside foreach loop. Another thing is you call prop.GetValue(node) 3 times per iteration which greatly degrades performance. By moving TypeDescriptor.GetProperties(node) outside the loop and storing prop.GetValue(node) into temp variable I was able to save another 5-6 seconds of page render.
The first one is in RadTreeViewRenderer.GetContextMenusHtml() where you use string concatenation instead of StringBuilder. By switching to StringBuilder I got about 5 seconds off, when generating html for 1500 elements.
The second bottleneck is in RadTreeViewXmlParser.GetNodeXml() where you place the TypeDescriptor.GetProperties(node) call inside foreach loop. Another thing is you call prop.GetValue(node) 3 times per iteration which greatly degrades performance. By moving TypeDescriptor.GetProperties(node) outside the loop and storing prop.GetValue(node) into temp variable I was able to save another 5-6 seconds of page render.