原文:http://www.cnblogs.com/sufei/archive/2010/04/23/1718260.html
先说一下问题的所在吧,公司的项目最近发现越来越慢一直找不到原因,主要是在加载 的时候比较慢,如果是512的内存可能要上分钟了,以前是很快的,我打开内存管理 工具一看我的天那200MB,这也太多了,我记得刚开始只有30MB左右,这是怎么回事呢?先看看我们的系统是这样的我放个图片上来吧,
左面是一个Tree,右面是一个TabControl,单击Tree里会把一个UserControl添加到TabControl里大家一看应该就明白了
我做了一个测试,才明白,我打开我们的系统一面单击一面看内存变化,我每单击一个项目会增加内存2MB左右,开始我没有认为有什么问题,因为这基本是正常的,可是当我把打开的用户控件再次关闭再打开时发现内存还在增加,再点一下又增加,也就是说单击同一个时在增加内存
这是怎么回事呢,我看了一直Tree的单击事件才明白
大家可以看一下以下的代码
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
//
button's click Tree
private void treeView1_MouseClick( object sender, MouseEventArgs e)
{
try
{
if (e.Button == MouseButtons.Left)
{
Point ClickPoint = new Point(e.X, e.Y);
TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
if (CurrentNode != null ) // 判断你点的是不是一个节点
{
treeView1.SelectedNode = CurrentNode; // 选中这个节点
}
// 如果是上层节点则展开之
if (treeView1.SelectedNode.Parent == null )
{
if (treeView1.SelectedNode.IsExpanded == false )
{
treeView1.SelectedNode.Expand();
}
}
else
{
// 验证权限不要删除动0不存在1存在2是查询失败
if (user.checkofficeinfoFunction(OfficeInfo.ofPara1, Convert.ToInt32(CurrentNode.ToolTipText.ToString().Trim())
, OfficeInfo.ofId) == 1 )
{
// 加载窗体
switch (CurrentNode.Text.Trim())
{
case " 中国移动 " :
SystemMusic.Mobile( false );
Mobile Mobile_frm = new Mobile(OfficeInfo);
Mobile_frm.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, Mobile_frm);
break ;
case " 中国联通 " :
SystemMusic.Unicom( false );
ClientSystem.China_Unicom.Unicom Unicom_frm = new ClientSystem.China_Unicom.Unicom(OfficeInfo);
Unicom_frm.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, Unicom_frm);
break ;
case " 中国电信 " :
SystemMusic.Telecom( false );
Telecom Telecom_frm = new China_Telecom.Telecom(OfficeInfo);
Telecom_frm.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, Telecom_frm);
break ;
case " 全国缴费 " :
SystemMusic.National_Mobile_Result( false );
NationalMobile objNationalMobile = new NationalMobile();
objNationalMobile.OfficeInfo = this .OfficeInfo;
objNationalMobile.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, objNationalMobile);
break ;
// 在这里添加新的栏目
default :
MessageBoxForm objform = new MessageBoxForm( " 您没有操作此栏目的权限,如有问题请与服务商联系!!! " , " 提示信息 " , MessageBoxIcon.Information);
objform.ShowDialog();
break ;
}
}
else
{
MessageBoxForm objform = new MessageBoxForm( " 您没有操作此栏目的权限,如有问题请与服务商联系!!! " , " 提示信息 " , MessageBoxIcon.Information);
objform.ShowDialog();
}
}
}
}
catch (Exception ex)
{
MessageBoxForm objform = new MessageBoxForm( " 提交超时 " + ex.Message.ToString(), "
private void treeView1_MouseClick( object sender, MouseEventArgs e)
{
try
{
if (e.Button == MouseButtons.Left)
{
Point ClickPoint = new Point(e.X, e.Y);
TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
if (CurrentNode != null ) // 判断你点的是不是一个节点
{
treeView1.SelectedNode = CurrentNode; // 选中这个节点
}
// 如果是上层节点则展开之
if (treeView1.SelectedNode.Parent == null )
{
if (treeView1.SelectedNode.IsExpanded == false )
{
treeView1.SelectedNode.Expand();
}
}
else
{
// 验证权限不要删除动0不存在1存在2是查询失败
if (user.checkofficeinfoFunction(OfficeInfo.ofPara1, Convert.ToInt32(CurrentNode.ToolTipText.ToString().Trim())
, OfficeInfo.ofId) == 1 )
{
// 加载窗体
switch (CurrentNode.Text.Trim())
{
case " 中国移动 " :
SystemMusic.Mobile( false );
Mobile Mobile_frm = new Mobile(OfficeInfo);
Mobile_frm.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, Mobile_frm);
break ;
case " 中国联通 " :
SystemMusic.Unicom( false );
ClientSystem.China_Unicom.Unicom Unicom_frm = new ClientSystem.China_Unicom.Unicom(OfficeInfo);
Unicom_frm.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, Unicom_frm);
break ;
case " 中国电信 " :
SystemMusic.Telecom( false );
Telecom Telecom_frm = new China_Telecom.Telecom(OfficeInfo);
Telecom_frm.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, Telecom_frm);
break ;
case " 全国缴费 " :
SystemMusic.National_Mobile_Result( false );
NationalMobile objNationalMobile = new NationalMobile();
objNationalMobile.OfficeInfo = this .OfficeInfo;
objNationalMobile.Parent_Main = this ;
addTabControl(CurrentNode.Text, CurrentNode.Text, MainTabControl, objNationalMobile);
break ;
// 在这里添加新的栏目
default :
MessageBoxForm objform = new MessageBoxForm( " 您没有操作此栏目的权限,如有问题请与服务商联系!!! " , " 提示信息 " , MessageBoxIcon.Information);
objform.ShowDialog();
break ;
}
}
else
{
MessageBoxForm objform = new MessageBoxForm( " 您没有操作此栏目的权限,如有问题请与服务商联系!!! " , " 提示信息 " , MessageBoxIcon.Information);
objform.ShowDialog();
}
}
}
}
catch (Exception ex)
{
MessageBoxForm objform = new MessageBoxForm( " 提交超时 " + ex.Message.ToString(), "