http://community.csdn.net/Expert/topic/5615/5615981.xml?temp=.1869165
高手们帮忙解决一下

解决方案 »

  1.   

    在看快乐大本营,一个MM打鼓本来就很有意思,一个七岁的小MM也会打很专业的架子鼓就真的令我大跌眼镜了,最令我吃惊的是,打鼓这么一件力气活,手短脚短胳膊细小MM打起来一点儿不费力,气不喘,还能唱歌……
    哎……
    无地自容……
      

  2.   

    1、C#做WinForm很慢
    这个,虽然你Ivony给出了一个比较中肯的解释。但是不可忽视的是,的确有点慢,我就不明白了。微软为什么不可以吧Label用GDI写?然后想个办法让设计器中可以可视的设置,为什么所有东西要继承自Control,那个Control到底做了什么?我也不知道微软做了什么,在嵌入式设备上,这个问题突出的不是一点点,界面切换来说,pc上是没所谓,不放个几十几百个控件,大多打开速度感觉很快,wince/ppc上就不同了。放大约15个控件(不算多吧,panel,button,picturebox)启动速度明显的慢了一点。然后我自己重写了按钮,重写了PictureBox,没有执行base.OnPaint,速度快了一些。我估计,微软追求一个高质量的外观,牺牲了不少时间来雕琢,就是那个可以适应于系统的控件风格的东西惹的祸估计。不用他的绘制就好一些,不知道是不是我测试不全面。如果有其他方法可以快速,更好了哦)2、.NET的程序是托管的,所以天生就慢。
    内存是便宜了没错。但是一个程序占用10M和占用20M相比,速度还是不同的。因为占用20M你自然要维护这么大一块内存,甚至可能要搬移,内存的拷贝和移动是最用时间的。虽然内存便宜了。但还是用的少好点,运行速度上考虑。3、托管对象资源占用很大,性能很差。
    貌似还是说内存?并不深入了解,只是看书上那些东西,感觉.net内存管理比c++的容易。具体如何实现的就没研究过了。效率不效率就更不了解了。不乱说这点。4、执行同样的代码,ASP.NET比JSP/PHP慢
    不懂web。综上所述:
    深夜睡不着,看着Ivony在发贴。来转悠一下。总之,对.net表示理解,对托管内存这个.net和其他语言最大区别的地方还是比较满意的,因为的确是简化了很多。安全了很多。但是界面方面。做的的确不理想。我想,.net如果可以这样。托管内存,但提供一套高效能的UI库,那就完美了。是不是?
      

  3.   

    我对WinForm不是很熟的,呵呵……
    我只不过是想说,把性能都推到.NET的身上,然后告诉客户,用.NET做就是这么慢的,那肯定是会被扣钱的……呵呵……不过WinForm方面,我也觉得.NET Framework可能是封装的太过了。当然,我们看到ASP.NET 2.0相对于ASP.NET 1.x就做了很多优化,所以我相信这个问题也不会拖太久吧。我也只是精通WebForm而已,偶又不是速马……
      

  4.   

    public class Control : Component, UnsafeNativeMethods.IOleControl, UnsafeNativeMethods.IOleObject, UnsafeNativeMethods.IOleInPlaceObject, UnsafeNativeMethods.IOleInPlaceActiveObject, UnsafeNativeMethods.IOleWindow, UnsafeNativeMethods.IViewObject, UnsafeNativeMethods.IViewObject2, UnsafeNativeMethods.IPersist, UnsafeNativeMethods.IPersistStreamInit, UnsafeNativeMethods.IPersistPropertyBag, UnsafeNativeMethods.IPersistStorage, UnsafeNativeMethods.IQuickActivate, ISupportOleDropSource, IDropTarget, ISynchronizeInvoke, IWin32Window, IArrangedElement, IBindableComponent, IComponent, IDisposable
      

  5.   

    开发给客户的是最终软件,最近的确看这类贴都烦人,在这里应该多讨论技术,大家共同进步.NET说好的也有说不好的,不要为此问题讨论不休,说好的是因为方便或得到了效益或是为了工具的前景等,说不好的有可能用学以前的工具比较熟悉,不想现在让新的工具(或潮流)来抵制自己熟悉的工具,也可能是对工具的故意抵制或是商业目的.客户为了管理或效益才会购用软件,时间本也是一种成本,不论是客户还是开发人员,快速开发本是开发追求的方向,别人喜欢用NET开发,你管的着吗?别人的客户愿意用,你有办法不让他用?有本事就把客户抢过来.开发工具本只是工具而以,是人用工具,适合的项目就用适合工具,别让工具玩人.别人只会Java或C#,你要让别人接到项目丢掉,等学会了C\C++\汇编来接项目,你看别人和客户愿意吗?我从来没有学过C\C++以及汇编,只会用VB和C#,但我也不一样接到项目,客户也没有要求我要用C++,非要用C++才能开发的项目我问都问.本来现在市场细化,我知道C\C++的功能很强大.但强大的未必适合自己,选择适合的工具用吧!到适合自己的论谈区发贴,别到处跑,还以为自己是救世主,不要把自己的意识强给加别人.
      

  6.   

    重写了PictureBox,没有执行base.OnPaint,速度快了一些。
    ----------------------------------------------------------------
    很 正常啊
    如果你用base.OnPaint 调用父类方法,那父类也调用base.OnPaint
    这就形成调用链,当然性能低 
    如果没有调用的话,你重绘控件可能有问题
      

  7.   

    程序运行的快慢和编程序所有的手法和技巧有很大关系,有人说.NET比自己以前用过的某个语言慢,这很可能是因为以前那个语言用的时间长理解的比较深刻,用的方法比较得当;而.NET的经验比较少,尚未运用自如,编出来的程序运行效率会差些,但这主要是程序员自身的问题,不能怪罪于工具不好.举个例子.我们公司一年多前要做一个对性能要求比较高的服务器,请了一个自称是高手的人(英国剑桥毕业的硕士),此人以前其它语言用过一些但C#经验基本上是纸上谈兵,结果由于对线程,AppDomain和数据库操作的一些处理不当,整个程序运行速度极其慢,达不到客户要求.他也曾经拿.NET语言甚至硬件做为借口. 但后来我们把此程序重新写(多亏时间允许),修改他了以前犯的设计错误,性能大幅度提升,完全达到客户要求.
      

  8.   

    看一看vista的效果就知道了,微软的解决方案是与硬件挂钩的,它基于一个事实和设想:硬件的升级无止境,而且周期短。所以他的精力放在便捷、安全以及外观漂亮上了,速度不是他的考虑重点,只要说的过去就行了。因为用不了多久,硬件的配置就足以让人忽略速度上的差异了。如今编程,除了特殊领域外,谁会为了省一点内存或提高一点性能,把功夫下到每一句代码?明白了大方向,一切就简单了:特殊需求,区别对待就可以了。
      

  9.   

    1、C#做WinForm很慢
    实际上慢不慢很大程度上是程序的问题,如果你想在图片上显示个字符想到用透明背景的Label,那么你怎么还能去埋怨这个程序慢。任何一个正常的C++程序员都会用GDI直接画在上面,这就是性能的差别。'========================
    这点上我绝对不同意楼主的意见,当然,绘制实没有问题的,关键是他的慢不光是因为这个。你拖进来10多个Lable控件就会造成屏幕界面的闪动是无论如何也说不过去的。
    我的机器1024M双通道DDR+3.0CPU,无论如何不能说配置不过关阿,即便这样,也不可避免的造成开发的时候改个控件名字也要卡半天的现象,运行的时候切换窗体会有晃动。这在其他语言里面都是不可思议的事情。VB里面可以支持到上百个Textbox不出问题
    .Net里面?10多个就开始了——双缓冲、绘制都是治标不治本的东西,算法再优化,也优化不到它骨子里面,一行代码都没有它都会慢,谁有脾气??隔三差五的项目莫名其妙的丢控件、丢窗体、无法加入控件、新加入的控件运行后看不到——我都遇到过,不要告诉因为我用Vs2005是盗版造成的。
      

  10.   

    唉!JFJFJFJFJFJFJFJFJF................
      

  11.   

    如果你的开发本身就是应用层面的,对程序效率的过多谈论是没有意义的.
    普通的客户也根本不会去关心你对它说c++效率好高好高.用起来怎么怎么个快.....
    客户只需要你最短的时间给出最为适用的产品.如果
    永远只知道 效率来谈 程序的好坏.
    那么注定你永远只能是个钳工,可能钳工都不如 这样的人我也见了好多..这也是很多程序员30多了还只拿那点工资, 没有团队精神,没有互助心, 喜欢单打独斗, 什么叫团队根本压根就不明白.做程序不但只是为了 写出最好, 最牛, 最快的东西.
    一个东西做出来不是因为它快而得到用户的最大认可的. 这个世界上很多技术niub 的公司最后失败了,就是因为他们不懂市场,不懂客户真正需要的是什么.java .net的出现 正是因为客户的需要而产生的.它们的市场不会因为他们的相对慢而消亡,反而在现今这样的计算机条件下.会越来越成功.如果微软在去用00011101写vista 那么我们50年后 可能才用的上了..
      

  12.   

    除了那个疯人院没关好,跑出来的以外,大家说得都有道理。
    .Net问题确实不少,WebForm开发会遇到,控件什么的问题。
    不过开发效率提高是不可忽视的。ps:你嫌.net慢就别用呗....用你觉得快的。
      

  13.   

    怎样才算精通WebForm?
    又怎样才算精通winform 唉。。现在请人都写着精通 真难明白什么叫精通。。
      

  14.   

    Winform
    慢是慢,与Vb比起来就是慢(我拿C#重写以前的Vb程序,对比出来的) 刚开始客户不接受,但慢慢习惯就好了,慢一那两秒对客户来说不太重要,习惯就发了:)
    但效率高,用惯了,界面漂亮,看各人口味了没有必要在意这些,客户说好就好 了,不好就不好,
      

  15.   

    看了这大家的贴,我还是比较赞同ycg_893() 这位大哥的话,确实,"强大的工具未必适合自己,选择适合的工具用吧!到适合自己的论谈区发贴,别到处跑,还以为自己是救世主,不要把自己的意识强给加别人." 
    如果你真的觉得这门语言不行,你就不要到这个社区来发表言论,老兄,这里不适合你,你还是快点走吧!到适合你的社区去,这里是大家讨论问题的地方,不是吵架的地方。
      

  16.   

    WinForm不是很熟,所以不敢妄言
    但我实在不清楚怎么会有一个界面上面有上十上百个输入框,是不是先检讨下自己的界面?
    至于Label,如果嫌慢,我觉得直接重写Form的Paint把文字画在相应的位置不就好了?
    最后是华丽的界面,如果你真的想把界面做的华丽,放个WebBrowser,放心,客户不会知道的……
      

  17.   

    我WinForm做了不少,客观的讲,可能会比传统的VB写的屏幕刷新慢一些,尤其是用了Dock,Anchor属性或者FlowLayout,TableLayout这类控件的时候,但这些功能都是VB不自带的,如果用一些特殊手法在VB里也实现同样功能,屏幕刷新速度的差距就不那么显著了.还有就是WinForm的速度不仅仅看屏幕刷新的速度,很大程度上和它读写数据的速度有关,这里边细活儿很多,出来的效果与设计和经验有很大关系.
      

  18.   

    只要开发效率能大幅提升同时性能损失可以接受,那么就是合理的;当然有些对执行效率要求非常高的场合除外都说java写的GUI比.net写的更慢,我写的java GUI程序也没觉得慢除了在架构,设计上要考虑性能之外,编码阶段也要十分注意,写的烂的代码能抵消掉前期所有的努力!
      

  19.   

    个人意见,C#和Java才是一对,比C++慢是正常的。
    不知道以后用WPF了会怎么样
      

  20.   

    其实讨论这么多C# 。net的性能到底优秀不优秀  我个人觉得根本都没有必要管这些 只要自己用着顺手的开发工具 开发什么软件都很快 你只熟悉C++ 不熟悉C#当然觉得C#效率不高了 开发同一个软件 当然会觉得不如C++来的快了 总之一句话 自己觉得好就用 看不上就不用
      

  21.   

    我的意见,我觉得LZ有个细节说得不正确。任何一个正常的C++程序员都会用GDI直接画在上面,这就是性能的差别。这句话对于C#来说不对。C#也是用GDI函数直接操作HDC的,只是包装成了GDI+。C#程序员的错误,我认为他们就是直接操作HDC造成的,如果仅仅显示文本时没有问题的,但是,他们犯的错误是在做渐变(用那个特殊的GDI+画刷)之类的耗时操作时候直接对HDC进行了操作,我认为如果在内存Bitmap上先做渐变,然后响应Paint的时候把内存Bitmap 刷(作C++都应该知道Bitblt吧)上去效果就会好很多。不能每次都直接在窗口HDC上直接“做画”我以前用Delphi的,开发Delphi的UI控件曾经也是我的工作,直接用原生的API做内存Bitmap缓存和不做效果差别极大,而且invalited的时机也很重要。有些时候设计出现问题,反复强制刷新也会造成问题。我觉得.net应该没什么问题,主要是程序员的问题,单个控件运算耗时但是测试不明显,界面上这些垃圾控件一多就挂了!其次可能就是GDI+新画刷的毛病。
      

  22.   

    我觉得.net应该没什么问题,主要是程序员的问题
    ------如果dotnet程序员总是出问题,dotnet程序员写的程序总是慢,那还是程序员的问题吗??
    这说明dotnet本身无法孕育好的程序员。
      

  23.   

    1、C#做WinForm很慢
    实际上慢不慢很大程度上是程序的问题。'========================
    这点上我绝对不同意楼主的意见,当然,绘制实没有问题的,关键是他的慢不光是因为这个。你拖进来10多个Lable控件就会造成屏幕界面的闪动是无论如何也说不过去的。
    我的机器1024M双通道DDR+3.0CPU,无论如何不能说配置不过关阿,即便这样,也不可避免的造成开发的时候改个控件名字也要卡半天的现象,运行的时候切换窗体会有晃动。这在其他语言里面都是不可思议的事情。
    ===========================================
    ===========================================
    winform相对慢是.netframework的错
    但你那10多个lable控件闪就是你的错了 不会 双缓冲 吗?真晕 莫非菜鸟都学.net了
      

  24.   

    winform相对慢是.netframework的错
    但你那10多个lable控件闪就是你的错了 不会 双缓冲 吗?真晕 莫非菜鸟都学.net了这么说不对了。除了.net哪个开发的时候还要自己考虑控件的双缓冲?.net的UI库做的不怎么样这个事实。比vs时代好看一点了。可以支持系统皮肤了,所以就慢的一塌糊涂了。
      

  25.   

    我觉得WINFORM的速度还是可以接受的....
      

  26.   

    顶,相信.net终将成为通用的技术而且会日臻完善。
      

  27.   

    个人感觉,C#在界面处理方面速度确实不够快,我在往ListView添加大量(几千上万个)ListViewItem时,平均1秒在30个以下,排除中间处理代码,也就在40个左右;而就使用代码便利一个INT数组(10000个)速度很快。
      

  28.   

    别整了,不喜欢.net的就不要用.net
    喜欢.net的就不要管别人怎么FP走自己的路,让SB们去说吧
      

  29.   

    //cainiaoxuefei(萍水相逢,尽是他人之妻)
    //winform相对慢是.netframework的错
    //但你那10多个lable控件闪就是你的错了 不会 双缓冲 吗?真晕 莫非菜鸟都学.net了莫非菜鸟也知道双缓冲了??你用过双缓冲?——我表示怀疑中
    你绘制的窗体和控件有多少??——双缓冲只能减轻部分闪动,不是灵丹妙药,靠,现在的菜鸟动不动就知道双缓冲,你缓冲得过来么!!~~.Net的慢和闪动基本上都成了特色了,反正大家追求的是开发速度等等,原本也无所谓。但是你不能因为你用它,就必须把它的慢和闪动——视而不见吧?理性的看待一种语言,才是最重要的。技术也是仅仅能提高部分性能(当然极菜的除外),它的原理决定了它的模式,这不是你水平高就可以改变的。