I don't think that you can improve the performance of the TreeView control by overriding Render event. I would rather looking at decreasing the content of the TreeView by using Html control in the template columns and avoid the usage of any images and things like that.
Using Session:
I order to maintain your datasource, say a datatable in Session follow the below code
//Check if the session object is null and populate the object from DB
if(Session["treeview_datasource"] == null)
{
//Query the database and populate the session object.
}
//Fetch the datatable from session always.
DataTable dt = Session["treeview_datasource"] as DataTable;
//Set the datasource and do the bind
TreeView1.DataSource = dt;
TreeView1.DataBind();
Note: In order to mantain the session you can use InProc, StateServer or Sql. If you are using a loadbalancer then it is wise to use StateServer