环境:VS2005 C# Winform我的程序在主窗口启动前,先要遍历网页收藏夹,创建菜单项并添入集合。等主窗口Load时,把集合里的菜单项拿出来放到主窗口的"收藏"菜单下。我收藏夹中放的文件很多。以前这一过程需要近两秒。为了美化界面,我通过继承ToolStripDropDown和ToolStripMenuItem重载OnPaint等函数实现了菜单自绘。让我意想不到的问题出现了:启动主窗口前遍历收藏夹创建菜单项这个过程,原先要近两秒,现在却要近四秒!通过测试我还发现,把ToolStripMenuItem替换成我的ToolStripMenuItemEx不影响启动速度。是使用继承自ToolStripDropDown的ToolStripDropDownEx影响了启动速度!我实在搞不明白呀,在主窗口还未启动前,仅仅是创建对象,怎么会有如此明显的速度差异?

解决方案 »

  1.   

    问题原因已找到:在ToolStripDropDownEx中,我重载了ToolStripDropDown的OnResize函数。在里面根据该下拉框里菜单项数量来决定下拉框尺寸。由于我在导入收藏夹过程中不断添加菜单项,导致ToolStripDropDownEx内容不断变化,OnResize被不断调用,消耗了很多时间。解决办法是将计算尺寸的代码放到ToolStripDropDownEx的Opening 事件处理函数中。