.Net开发轻便的WinForm程序

vikey 2003-09-29 04:33:43
开个贴子讨论.Net开发WinForm程序,如何生成轻便的应用程序。
我开发了一个WinForm管理系统。运行起来非常慢,感觉没有Delphi开发出来的产品
执行速度快。

顺祝广大程序员国庆节快乐!
...全文
94 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
JB-Zhang 2003-09-30
  • 打赏
  • 举报
回复
其实.NET的程序慢主要有两个原因:1、是因为多一个IL,另外一个是因为要是编写数据程序的话,使用了大量的DataSet,DataSet是一个内存中的数据库,当然也没那么夸张,可以说它是数据库的很大一部分在内存中的映射吧,所以占用了大量的内存。
解第一个问题,只有提高机器的性能,和尽量使用灵活、高性能的数法。第二个问题原来是可以解决的,我们公司曾经做过一个系统,在运行时,这个程序占用了800多M的内存,再运行一次的时间却内存不足了,连虚拟内存也不行,原因在于,系统中使用了太多的DataSet,其实.NET在运行时,DataSet是作为一个对象被装入内存的,有时个我们需要很多个DataSet同时工作的时候,就会出现内存中存在多个民巨型DataSet占用了大量内存的情况,此时就会是系统运行的内存消耗峰值,我们经过研究,其实很多DataSet应该很早就被清除出存内了,可是因为.NET的自动垃圾回收根本达不到我们程序要求的收回速度,就是说,我们有些地方没有用到一些DataSet了,可是它还是没有被回收,要等到一个进程结束后才回收,那我们宝贵的内存就被这些“垃圾”占了。所以我们解决的办法就是手动回收内存,可以使用GC类中的相关方法,大家研究;其实不单是DataSet这类的对象可以被清除,内存中任何对象都可以被清除出内存,但是大家使用GC的时候就要小心了,你很有可以把还有用的数据清除掉。所以这样做又好像回到C++年代了,程序的内存管理又由程序员控制了:),不过我更喜欢由我来控制,老实说,我还真的信不过.NET的垃圾回收机制。
coudoufu 2003-09-29
  • 打赏
  • 举报
回复
确实慢了点,希望有所改进……
5956 2003-09-29
  • 打赏
  • 举报
回复
可以使用本机映像生成器Ngen.exe

本机映像生成器创建托管程序集的本机映像,并且将该映像安装到本地计算机的本机映像缓存中。本机映像缓存是全局程序集缓存的保留区域。一旦您为某个程序集创建了本机映像,运行库在每次运行该程序集时就会自动使用该本机映像。不必执行任何其他的过程就可使运行库使用本机映像。在程序集上运行 Ngen.exe 可以提高程序集的加载和执行速度,原因是它可以从本机映像缓存中还原代码和数据结构,而不是动态生成它们。

具体使用方法可查MSDN
daou101 2003-09-29
  • 打赏
  • 举报
回复
有关.NET优化的问题,谁有这方面的心得,欢迎讨论
daou101 2003-09-29
  • 打赏
  • 举报
回复
我想这涉及一个程序优化的问题,我最近编写一个信息提取软件,从文档中过滤想要的信息,开始很慢,2.0版后,我对程序中的这些问题进行了优化:
1.非万不得以,不自定义排序;
2.非万不得以,不用递归
3.后台多线程读文件
4.后台懒汉式写信息
5.共享式文件注册表(不使用远程注册表操作),用XML实现
7.通信模块独立,且后台运行,它只完成通信任务,不接受主程序控制
在.NET上作这些改进极其容易,这样出现用户等待的情况几乎没有了,而且对网络共享提取信息,共享配置信息非常方便。我试着用VC++实现,发现恐怕需要3倍的工时,速度可能有少量的提升,但这好像得不偿失。
External 2003-09-29
  • 打赏
  • 举报
回复
c#是OO语言,OO本身就是为了解决complexity才产生的,
如果相对问题的complexity,速度显得无关紧要的话,选择c#做winform程序就比较合适了。
SaSBYa 2003-09-29
  • 打赏
  • 举报
回复
To nehc(青义居士) :
----------------------------------------------------------------------
其实,第一次编译il是比较慢些。不过,你可以把你的程序加到启动组里面(给个特定的参数嘛,要它不声不响的)。然后程序启动退出。等用户“第一次”运行的时候,就快的很了。
----------------------------------------------------------------------


还是你高明,这样的话又快,显示的占内存可能还少些,不如干脆做个程序,内部调用那个程序集,这样,明修栈道,暗渡陈仓。呵呵。



个人看法,同herofyf() 比较相似:<---我只能提供尽量用存储过程,和少用一些dataset!--->

不过,我要加一句,动态生成DataSet(手工生成DataSet),并尽量使用存储过程,同时,少用代码向导,这样的话,你可以少产生一些什么接口,函数,过程等等,同时在类的层次上下点工夫,这样就可以使代码在运行时占用更少的内存,或许也可以提高一点速度(如果系统分配内存的时间不是很多的话)。另外一点,Windows2003内部集成了1.1的内核,运行咱们的程序速度和性能都有提高,内存相对占用也少了些。可能可以这样说吧,Win2K/XP/9X/ME下安装的.Net Framework像是操作系统的“外挂”,所以慢些,占内存多些吧。

(一家之言,仅供参考)




changezhong 2003-09-29
  • 打赏
  • 举报
回复
delphi在开发网络方面的程序不如.net,但是开发winapplication的话,delphi略胜一筹]

同意!

祝所有的程序员,节日快乐
ego 2003-09-29
  • 打赏
  • 举报
回复
有这样的工具嘛?想知道
niaoren 2003-09-29
  • 打赏
  • 举报
回复
好像有把.net中间语言转换成机器语言的工具
zhpsam109 2003-09-29
  • 打赏
  • 举报
回复
我也写了一个winform的,感觉没有那么慢!
kuangren 2003-09-29
  • 打赏
  • 举报
回复
en
希望以后可以改善~
qiuji 2003-09-29
  • 打赏
  • 举报
回复
因为.net生成的Windows应用程序先是中间代码,运行时将中间代码转换成机器代码,所以运行起来速度稍微慢了一点。
borlang 2003-09-29
  • 打赏
  • 举报
回复
用.net开发winform目前没什么优势,但以后操作系统自带.net FrameWork以后就难说了。
isonme 2003-09-29
  • 打赏
  • 举报
回复
其实目前来看,我觉得.net还是写 web form比较好,win form的话运行起来确实有点慢慢的
linday 2003-09-29
  • 打赏
  • 举报
回复
国庆节快乐!!
hihin 2003-09-29
  • 打赏
  • 举报
回复
unmanaged c++写dll,c#写界面,我想可能速度还成.
cnhgj 2003-09-29
  • 打赏
  • 举报
回复
delphi在开发网络方面的程序不如.net,但是开发winapplication的话,delphi略胜一筹
shenshenxiaoyuan 2003-09-29
  • 打赏
  • 举报
回复
祝大家节日快乐!!
nehc 2003-09-29
  • 打赏
  • 举报
回复
其实,第一次编译il是比较慢些。不过,你可以把你的程序加到启动组里面(给个特定的参数嘛,要它不声不响的)。然后程序启动退出。等用户“第一次”运行的时候,就快的很了。

不要说是我出的主意。
加载更多回复(9)

110,502

社区成员

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

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

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