Windows程序效率

原创 2003年07月12日 10:45:00
       Windows是一个庞大的功能丰富的系统,并且为我们提供了强大的应用程序接口,使我们可以编写功能丰富的应用程序,但正因为Windows的复杂性和应用程序接口的强大,我们往往忽视了很多技术细节,使得写出来的程序效率较低,缺乏竞争力。以下是我总结的一些提高程序效率的规则,希望对提高程序质量有帮助。

 减少程序在核心态和用户态之间的切换<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       我们知道Windows系统中的应用程序可以在两种状态下运行-用户态和核心态,但是如果进程在两种状态之间切换,则需要耗费上千个CPU周期,这对于高质量的程序来说是绝对不能容忍的。典型的例子是用户线程互斥的临界区和互斥体(Mutex),互斥体是核心态对象,应用程序使用它时会切换到核心态,而临界区则直接在用户态下工作,所以如果可能,应该用临界区取代互斥体。

 使用线程代替进程以减少系统资源的开销

       Windows系统中,进程是资源非配的单位,线程是调度的单位,因为线程共享进程的地址控件,所以与创建进程相比,创建线程可以节省大量的系统资源开销。所以对于并发计算的问题,可以尽量使用线程机制来实现。

 减少线程场景切换的开销

       线程为应用程序提供了并发机制,使程序的多个代码段可以“同时”运行,比如使用多个线程提高费时的IO操作,但是不是线程愈多越好呢?当然不是,线程虽然使用进程地址空间,但仍有自己的运行环境(堆栈、临时令牌等),线程场景的切换是要耗费CPU资源的,同一个计算过程(不涉及IO操作),使用两个线程来完成比使用一个线程来完成所需要的时间实际是更多。

 减少内存的跨边界()访问

       Windows系统中,内存是以页(4KB)为单位组织的,由于Windows是虚拟存储系统,内存中的页在不用时常换出到外存中,需要用到的时候再装入内存,这样可以使一个应用程序使用比实际内存大得多得地址范围。但是内存得换入换出与CPU得执行速度相比是很费时的IO操作。下面有两段几乎完全一样的程序,在VC下编译为release版本后,前一段的执行时间是后一段的200多倍

程序1

       char buf[8][4000];

       char ch;

       int i, j;

       for(j=0; j<4000; j++)

       {

             for(i=0; i<8; j++)

              {

                     ch = buf[i][j];

              }

       }

 程序2

       char buf[8][4000];

       char ch;

       int i, j;

      for(i=0; i<8; j++)

       {

             for(j=0; j<4000; j++)

              {

                     ch = buf[i][j];

              }

       }

10个增强Windows效率的必备免费软件

几乎每台电脑都装有windows系统,因此我们每天都对硬盘里的文件进行复制,粘贴,创建,移动,删除等等。windows本身的操作工具,例如简单的复制粘贴功能,简陋的资源管理器,都不能满足高效率的要求。...
  • baogreat
  • baogreat
  • 2007年12月06日 12:36
  • 606

windows文件读取效率对比

readfile1.cpp是使用内存映射文件读取文件,readfile2.cpp是普通ReadFile readfile1.cpp代码 char buf[10001]; const char...
  • liumengcheng
  • liumengcheng
  • 2013年12月25日 10:14
  • 1238

C++程序效率优化

文章出处:http://hi.baidu.com/upcal/blog/item/c0c6a9ef8d850d14fdfa3cc5.html     去年在研究格式识别树时,对算法优化方面做了一些处理...
  • ixidof
  • ixidof
  • 2010年02月11日 23:19
  • 2390

C与C++中的常用提高程序效率的方法

1.用a++和++a及a+=1代替a=a+1,用a--和--a及a-=1代替a=a-1   通常使用自加、自减指令和复合赋值表达式(如a-=1及a+=1等)都能够生成高质量的程序代码,编译器通常都能...
  • huatian5
  • huatian5
  • 2016年04月07日 10:23
  • 1167

linux和windows下UDP发送效率的有趣比较

今天在测试UDP发送效率和RUDP代码时效的问题,偶然的机会发现一个比较有趣的事情,先把我的测试代码贴上来看看,代码如下: int test_udp() { //_beginthread(sock_...
  • u012935160
  • u012935160
  • 2014年03月18日 15:33
  • 2091

程序效率

1. 请简述以下两个for循环的优缺点(5分) for (i=0; i { if (condition)      DoSomething(); else      D...
  • qq372895101
  • qq372895101
  • 2013年10月31日 11:53
  • 313

精通COBOL--11.1.2 提高部分功能段执行效率

  COBOL可调用的子程序并不一定要求由COBOL所编写。实际上,COBOL语言所调用的子程序是可以由其他语言编写的,如汇编语言、PL/1语言等等。对于某些功能,使用其他语言编写往往执行效率会更高。...
  • COBOL_OS
  • COBOL_OS
  • 2008年04月29日 10:14
  • 640

提高二维矢量绘图效率之一般做法

作者:朱金灿 来源:http://blog.csdn.net/clever101              这个问题很普遍。最近在研究这个问题,在网上搜了一些资料,再结合自己的经验,谈谈自己的一...
  • yinyhy
  • yinyhy
  • 2013年08月16日 14:35
  • 1625

Java程序StringBuilder的效率,验证字符串操作和字符串生成器的操作效率

创建类Jerue,在主方法中编写代码 package person; public class Jerque { public static void main(String[] args){ ...
  • Icarus_
  • Icarus_
  • 2016年03月19日 10:29
  • 410

PHP编程效率的50个要点

1、用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册...
  • u014068781
  • u014068781
  • 2016年08月24日 19:32
  • 538
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows程序效率
举报原因:
原因补充:

(最多只允许输入30个字)