winform程序启动很慢

葫芦娃拔拔 2017-08-05 11:59:00
C#开发,winform程序
公司的代码。往里头加了个功能后,程序启动变的很慢了,原来三四秒就会显示登录界面,一下子变得要近20秒才能显示。
把我添加的功能去掉后,启动速度丝毫未见好转。再去掉一部分功能后,还是不见好转。
先在Program的Main方法中添加了个方法,记录运行时间。从Main开始运行到登录界面打开,1秒不到。但从我双击程序到登录界面打开,依旧有20秒。

又使用任务管理器进行监视,双击打开程序时,任务管理器显示,双击程序,1秒的样子,就出现在任务管理器的进程中。大概近20秒后才开始执行main函数,打开登录界面

有哪位大神遇到过类似情况???
...全文
1043 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
葫芦娃拔拔 2017-08-07
  • 打赏
  • 举报
回复
引用 4 楼 积极进取sbc的回复:
添加日志,测试判定是那段代码原因,造成启动耗时!
我已经把测试代码写到main函数的最前端了 双击程序后,大概20秒才执行main最前端的测试代码 而且,我电脑上有这个程序之前的版本,也变得启动很慢了
积极进取sbc 2017-08-07
  • 打赏
  • 举报
回复
添加日志,测试判定是那段代码原因,造成启动耗时!
葫芦娃拔拔 2017-08-07
  • 打赏
  • 举报
回复
引用 2 楼 以专业开发人员为伍的回复:
其中第一种最明显,其实看到这种模式的代码,就知道是什么人在编程设计啦。一旦他多次使用这种代码,甚至在类型初始化时胡乱罗列好几个此类代码,他暗自得意好”像是不阻塞你的Main程序“,而且是整个进程变的很慢,那就是灾难了。
不是这些原因 我们的系统确实有些子线程处理一些数据更新、读取之类的。 所以,决定增加一个辅助程序,由辅助程序与数据库进行交互,把结果返回给我们的系统。 辅助程序与我们的系统之间的数据交互,我用的是remoting。大致方法是,我们的系统启动登录后,检查文件夹下有没有辅助程序,如果有,启动辅助程序。辅助程序进行数据检查、更新。 可是,做完后,发现我们系统启动变得很难了,大概要20秒,系统的登录界面才会显示出来。在系统的Main函数的最前面加了测试代码,发现我双击了程序近20秒后,系统的main函数才开始执行。测试代码放在main函数的最前面,系统还没有跑其他代码… 打开任务管理器观察发现,双击系统后,只有1秒的样子,任务管理器里就有了相应的进程。但要过近20秒才会开始执行main函数。 没找到原因,我就把辅助程序相关的代码全部注释了,发现系统启动还是很慢。 电脑上有以前生成的exe,没有使用过任何辅助程序、remoting的代码。以前的程序也变得要20来秒才能启动了。 代码是上传到svn的,另一个同事也获取了最新代码,跑过辅助程序,也变得很慢了… 不知道这个跟remoting有没有关系…
  • 打赏
  • 举报
回复
其中第一种最明显,其实看到这种模式的代码,就知道是什么人在编程设计啦。一旦他多次使用这种代码,甚至在类型初始化时胡乱罗列好几个此类代码,他暗自得意好”像是不阻塞你的Main程序“,而且是整个进程变的很慢,那就是灾难了。
  • 打赏
  • 举报
回复
检查两类代码: 1. 垃圾“线程+while+sleep+阻塞(例如Invoke、WaitOne)代码。 2. 有人把定时器的 Interval 设置很短,例如只有50毫秒。 这两类代码其实都反映了同一种初学编程的倾向,就是不会用事件设计思路、而用轮询来模拟事件设计。
有用新版PPS的吗?有用新版暴风影音的吧?呵呵,它们都带影子进程哦~ 用俺这个软件可以自动清除它们的影子进程地 --------------------------------------说明 《清影法宝》V1.0 正式版 一. 简介: 《清影法宝》是什么?就是清除影子进程的一个法宝(小程序)。那什么是影子进程呢?影子进程是我起的名字,就是某个程序启动以后,会启动另外一个子程序,当主程序被你关闭后那个子程序依然在运行着。影子进程象影子一样随主程序启动启动,但并不随主程序退出而退出,而且关键是这类影子进程很耗系统资源,让系统反应变慢。很烦人的吧。 现在的某些常见的应用程序有个比较让人头疼的问题,如《暴风影音》或者《PPS网络电视》都存在该问题。就是它们都会启动一个影子进程(我这么称呼它)。我个人感觉这类影子进程应该是做为加速或主程序缓存来使用的。最最关键问题是除了启动影子进程以外,还会将影子进程写入注册表的启动项中,等你下次启动 Windows 时系统就会自动运行该影子进程。 根据我的经验,这些影子进程启动后会极大的耗用系统资源,使系统启动速度变慢、系统变慢等缺点!哎~俺滴切身体验啊。 综合以上原因俺就写了个小程序,它修改被监视应用程序的快捷方式,并会随着应用程序启动启动一个Window服务,随时监视应用程序的状态。当应用程序退出的时候,《清影法宝》监测到主程序退出了,会将影子进程结束掉(割掉小尾巴),同时将注册表启动项中的影子进程删除掉。这样我们的世界自然就清净了。 二. 安装说明: 1. 《清影法宝》1.0 可安装在以下环境中: Windows XP/Windows 2000/Windows2003 2. 《清影法宝》由于使用.NET语言编写,因此安装前要求Windows系统必须安装 .NET FrameWork2.0环境。若您的系统未安装过 .NET FrameWork2.0环境,也没关系,因为安装《清影法宝》程序时会自动到网络上的微软网站下载该环境的安装程序安装。您只要按照安装提示将 .NET FrameWork2.0 环境安装成功后即会自动继续安装《清影法宝》的安装程序。 3. 《清影法宝》试用于如:《暴风影音》、《PPS网络电视》等程序,具体要看程序是否有影子进程哦:) 4. 《清影法宝》安装成功后,需要手动修改一项内容:鼠标右键点击桌面上的 我的电脑 —> 管理 打开后 点击左边服务和应用程序前的"+"号 然后选 服务,右边找到名称为“ClearShadowService”的服务,右键点它,选属性 打开后选登录,选中 此帐户,在账户名和密码中输入您用来登录windows系统的w帐户名和密码,确认密码后点应用按钮,然后退出即可。(注:这里的登录账户名和密码最好是Administrator的用户哦!) 有人可能会提出这步最麻烦,可一来俺水平有限,二来人家Windows就这么规定window服务的注册表修改权限是有限的,要是做手动修改这一步,可能会删除不掉注册表中的影子进程呢。 三. 使用说明: 1. 首先启动要监视的应用程序如PPS网络电视。然后确认主程序和影子进程都已启动(PPS网络电视的影子进程在开始播放电影的时候才会启动哦),不要退出这个程序哦,把它最小化即可。 2. 双击桌面上的清影法宝启动程序(这个程序是清影法宝设置程序) 3. 《清影法宝》启动后,点击“添加监视”按钮,打开后在“新监视程序名称”中输入你本次添加的监视名称(如果是要监视PPS你可以输入PPS监视)。在“选择主进程”中选中应用程序启动的主进程(PPS网络电视的主进程名为:PPStream),然后在“选择影子进程”中选中随应用程序启动的影子进程(PPS网络电视的影子进程名为:ppsap),然后点击“下一步”按钮 4. “添加快捷方式的监视”中选择目标应用程序在桌面、快速启动栏及开始菜单中的快捷方式名称,然后点“添加监视”按钮,确认所有要监视的程序快捷方式都添加到”已监视的快捷方式“列表中后,点击“下一步”按钮 5. “选择清除注册表的方式”不用修改,选择默认即可(默认为:主进程结束后清除),依次选中左边注册表键Run、RunOnce和RunOnceEx 键名,右边钩选中要清除的注册表键名,然后点击“添加到列表”,当所有要清除的影子进程项都添加到列表中后,点击“完成”按钮。(PPS网络电视的影子进程注册表项在Run中,键名叫:PPS Accelerator) 6. 经过以上五个步骤,应用程序的监视就设置完成了,点击“退出程序”来退出清影法宝设置程序。《清影法宝》监视列表中的监视项可以删除,删除时,会将设置监视时备份的快捷方式恢复的。 7. 大家都试试你已添加的监视吧,呵呵...

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧