佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1186|回复: 14

[询问] Windows 和 Console Application 之效率

[复制链接]
发表于 21-5-2006 08:27 AM | 显示全部楼层 |阅读模式
一般下 Console 程式的执行效率都会比 Window 程式快。
小章鱼想请教,如果 Window 程式在没有开启任何 Form 的情况下和 Console 执行同样的咚咚,
其效率会否和 Console 程式一样呢?

小章鱼的目的是要做高效能的程式,程式是一直处在无尽回路中的。
原 Console 应该是最好的选择,不过由于程式本身有时候又需要界面,
所以想请教 Window 程式在关闭所有的 form 后只留下一个无尽回路,执行效率会否提高(近 Console 效率)?

谢谢
回复

使用道具 举报


ADVERTISEMENT

发表于 21-5-2006 11:30 PM | 显示全部楼层
我猜想这样做的话... 你的程序会当掉整个 windows. 但首先想了解的是, 你的无尽回路是怎么一回事?
回复

使用道具 举报

发表于 22-5-2006 10:45 AM | 显示全部楼层
原帖由 sson 于 21-5-2006 08:27 AM 发表
一般下 Console 程式的执行效率都会比 Window 程式快。
小章鱼想请教,如果 Window 程式在没有开启任何 Form 的情况下和 Console 执行同样的咚咚,
其效率会否和 Console 程式一样呢?

小章鱼的目的是要做高 ...


其實就算你的 form 打開, 如果不需要 refresh / update form
你可以 LockWindowUpdate, 那麼 windows 不會處理你的 form
會快不少
回复

使用道具 举报

发表于 22-5-2006 10:51 AM | 显示全部楼层
参考一下Multi Threading。当程式需要在background操作的话,Thread会和Windows妥协,达到最佳作业效率。
回复

使用道具 举报

发表于 22-5-2006 02:17 PM | 显示全部楼层
原帖由 sson 于 21-5-2006 08:27 AM 发表
一般下 Console 程式的执行效率都会比 Window 程式快。
小章鱼想请教,如果 Window 程式在没有开启任何 Form 的情况下和 Console 执行同样的咚咚,
其效率会否和 Console 程式一样呢?

小章鱼的目的是要做高 ...


无尽回路 = infinite loop?

据我所知。。。每个在os里运行的程序都应该有无尽回路。。。

如果,我没猜错的话。。。用vb6,vb.net,c#,foxprol,dephi,java等等compiler来制作windows程序(有Form),compiler都会帮我们制作一个看不到的infinite loop。。。

这个loop主要是用来执行TranslateMessage和DispatchMessage,再用GetMessage来断定loop的中止。。。
DispatchMessage会把window message送回给WndProc。。。之后,WndProc再分析window message。WndProc这个部分就是处理各种keyboard,mouse event。。。
.net已经可以override WndProc,不过loop的地方应该还不能控制。。。

console程序没有form这个部分。。。缺少了隐藏着的loop,所以用console作无尽回路的效果会比较好。。。
回复

使用道具 举报

 楼主| 发表于 22-5-2006 10:19 PM | 显示全部楼层
goatstudio
无尽回路,嗯……
  1. while(!terminated){
  2.     // terminated 只在结束程式时才会 true
  3. }
复制代码


yongkahfai 程式是双线程的,不过双线程都是无尽回路

flashang Form 打开后会 refresh/update 的,
只是在用完后就会 disposed 。
小章鱼测试过,感觉一样,不过想真正的了解,是不是真的一样。

meemee 对,无尽回路 = infinite loop
是的,Form 本是一个无尽回路,不过那是由系统的主回路来管理的吧,
所以资源耗损度是和自己创造的无尽回路应该是天壤之别,对吧?


对不起,小章鱼对系统实在是不了解,如有错请各位指点。

[ 本帖最后由 sson 于 22-5-2006 10:22 PM 编辑 ]
回复

使用道具 举报

Follow Us
发表于 23-5-2006 11:15 AM | 显示全部楼层
你使用什么编程语言?
回复

使用道具 举报

 楼主| 发表于 23-5-2006 12:08 PM | 显示全部楼层
糯米鸡 C#
回复

使用道具 举报


ADVERTISEMENT

发表于 23-5-2006 04:24 PM | 显示全部楼层

回复 #6 sson 的帖子

Form 本是一个无尽回路,不过那是由系统的主回路来管理的吧


你的说法应该也对。。。
不过,如果是比较low-level的做法,这个回路就必须自己编写和控制。

Creating a Message Loop
The system automatically creates a message queue for each thread. If the thread creates one or more windows, a message loop must be provided; this message loop retrieves messages from the thread's message queue and dispatches them to the appropriate window procedures.

Because the system directs messages to individual windows in an application, a thread must create at least one window before starting its message loop. Most applications contain a single thread that creates windows. A typical application registers the window class for its main window, creates and shows the main window, and then starts its message loop — all in the WinMain function.

You create a message loop by using the GetMessage and DispatchMessage functions. If your application must obtain character input from the user, include the TranslateMessage function in the loop. TranslateMessage translates virtual-key messages into character messages. The following example shows the message loop in the WinMain function of a simple Windows-based application.


如果,是vb,.net和java,它们都是处于virtual machine的状态。我猜测它们回路应该是在wm那里控制。。。

至于,foxprol,delphi,我还没有机会diassemble它们的程序。。。还猜不到它的回路在那里。

我的看法是,不会有很大的影响。。。因为那个隐藏着的回路是由.net frame制作出来,然后会跟着dispose消失。
即使用flashang的方法,应该也不会多大影响。

[ 本帖最后由 meemee 于 23-5-2006 04:34 PM 编辑 ]
回复

使用道具 举报

发表于 27-5-2006 05:18 AM | 显示全部楼层
所以想请教 Window 程式在关闭所有的 form 后只留下一个无尽回路,执行效率会否提高(近 Console 效率)?

真的要比較,就用profiler測量程式執行時間才準確。在.NET 2有一个Stopwatch class供簡單的測量。

另外,你也可以調整thread的priority來提高效率。


如果,是vb,.net和java,它们都是处于virtual machine的状态。我猜测它们回路应该是在wm那里控制。。。

至于,foxprol,delphi,我还没有机会diassemble它们的程序。。。还猜不到它的回路在那里。

.NET 的 Application.Run 就是GetMessage和DispatchMessage的迴路,Delphi亦是。
回复

使用道具 举报

 楼主| 发表于 30-5-2006 08:26 AM | 显示全部楼层
meemeefxam 细心为小章鱼解。

fxam 不想用强制 high priority 的方式(这是用户选项)

在几番测试后觉得真的差不远,详细的只有在程式大致架构完成后再测试才能做准了,
毕竟目前只是一个简单的空壳子测试罢了。

不过实际上程式的设计在 UI 上从 WinFrm 转 Console 也没有太多的问题,
就是懒,想动工后就朝一个方向不更改
回复

使用道具 举报

发表于 1-6-2006 09:13 AM | 显示全部楼层
我认为不可因为追求完美的效率而牺牲易用性,那些3D软件不也有华丽的界面吗?没有易用的界面,相信你的研发过程也会很辛苦。
回复

使用道具 举报

 楼主| 发表于 4-6-2006 10:34 AM | 显示全部楼层
Jezz 你说得是,不过有些程式基本上没有什么“易用性”的需要,
试问如果一个程式执行后,界面上只有一个 Quit 按键,那么这 Winfrm 程式和 Console 程式 Press Enter to quit 的所谓“易用性”没有差吧。

所以在这情况下,咱们当然是不考虑的优先采取效率咯。
再者,在某些情况下,有时候效率和“易用性”也是需要取舍的。
回复

使用道具 举报

发表于 6-6-2006 05:25 PM | 显示全部楼层
錯錯錯,如果WinForm及console都沒有需要太多的UI的話,那它們的速度會差不了多少的。
回复

使用道具 举报

 楼主| 发表于 9-6-2006 05:00 PM | 显示全部楼层
馬拉棧 此帖的用意就是求证 WinForm 和 Console 在近零界面时效率究竟差多少。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 6-8-2025 01:07 PM , Processed in 0.140346 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表