Crazy ITer

 
Motto
It is strange that all great men should have some little grain of madness mingled with whatever genius they possess。
---------Moliere

When looking up, one has no occasion for shame before heaven, and below, one has no occasion to blush before men。
---------Mencius

The mechanic, who wishes to do his work well, must first sharpen his tools
---------Confucius

Python
SQL
UML
Zope&Plone
Ajax & Script
Jabber
Linux
C#与C++的效率之争(转贴1)
2007年9月13日星期四
C#目前是微软.NET平台首推的应用程序开发语言.C#编写的应用程序必须运行在受控环境(managed)中.与以往非受控(unmanaged)的C++相比,C#应用程序的性能到底如何呢?经过几个方面的性能测试,我们发现C#应用程序的运行速度远远不如非受控C++应用程序.在这场速度的大比拼中,非受控C++具有明显的优势.它将一如既往地成为大多数程序员的最爱.  

          本文拟通过一些正统的和非正统的性能测试方法,对C#和C++程 序进行测试.在这些测试的统计数据中.读者会发现C#程序的性能到底如何.做为程序员,我对C++情有独钟.在我的职业生涯中,一直都在使用Visual   C++.希望本文能给程序员们一点提示,以便在编写不同的应用时选择适合的编程语言.  
          Visual   C++是Win32平台上性能最好的编译器之一,我想这已经成为一种共识.  
  .NET是微软提供的一种新的应用平台.  
  首先我说明一下自己机器的软硬件环境:  
  硬件环境:Dell   Inspiron   3800   G700GT   笔记本电脑CPU/PIII/700,ROM/128MB,HD/12GB.  
  软件环境:Windows   2000   +   SP2,.NET平台   +   Visual   Studio.NET,Office   XP.  
  所有的测试均是在命令行状态下以RELEASE模式编译程序,而非Visual   Studio   IDE集成开发环境, 并在命令行状态下执行程序.没有对编译过程进行任何优化.  
  本文的测试由四个部分组成.其中包括用著名的埃拉托色尼过滤算法(Sieves   of   Eratosthenes)进行的测试及其它的单项测试,单项测试主要的考察.NET框架中特定项目的性能:    
  1.Hello   World   测试  
  .NET框架的一个问题是程序的启动时间.因为.NET框架运行在Win32之上,因此要启动一个.NET框架程序需要额外的启动时间开销 .    
  2.埃拉托色尼过滤算法(Sieve   of   Eratosthenes)测试  
  这个过滤算法是一个古老的寻找素数的方法.因为开发这个算法是为人类所用,因此这个算法很占用CPU资源(非CPU优化),从而能提供非?玫幕�挤从橙宋�蛩?记住,编写程序的总是人.    
  数据库存取测试  
  当今应用程序服务器往往都要用到数据库,所以我觉得用ADO.NET来测试C#的数据库存取性能与用常规ADO测试Visual   C++的数据库存取性能进行比较是很能说明问题的一个好方法.    
  3.XML测试  
  XML是一种最新的并且是流行的技术.因此许多人都会对用C#   和Visual   C++解析XML的性能感兴趣.  
  Hello   World  
  Hello   World测试程序主要是评测加载一个程序及其运行时环境所用的时间.C++的程序运行需要C运行库,从所周知,这个库是相当轻量级的.而C#程序的运行必须要加载.NET框架,从目前的情况看,这个框架无庸置疑不是一个轻量级的.  
  Hello   World程序的C++代码如下:  
  [html]代码一:helloworld.cpp  
    #include    
    int   main(int   argc,   char   *argv[])  
    {  
      std::cout   <<   "Hello   World"   <<   std::endl;  
      return   0;  
    };   [/html]  
  Hello   World程序的C#代码如下:    
  [html]代码二:helloworld2.cs  
    using   System;  
    namespace   HelloWorld  
    {  
    class   Class1  
    {  
      static   void   Main(string[]   args)  
      {  
      Console.WriteLine("Hello   World");  
      }  
      }  
    }   [/html]  
  从这个测试的结果中, 我们可以看到程序在相应环境中的加载时间.对于一个只完成简单任务的程序来说 ,无疑我们需要它能快速加载和退出.Perl脚本是个有代表性的例子,运行这种需要大量的加载时间,从而导致其不能满足基于CGI且面向性能的Web站点的需要.这时,人们常常选择C++程序替Perl脚本.但对于需要长时间处于激活状态的程序,其加载时间相对运行时性能来说就显得并不是那么很重要了.下表是十次测试的结果:  
  表一:Hello   World   测试结果   序号   C++(~毫秒)   C#(~毫秒)    
  1   40   1221    
  2   20   121    
  3   10   130    
  4   10   100    
  5   10   110    
  6   10   130    
  7   10   120    
  8   10   140    
  9   10   150    
  10   20   140    
  平均值   15   235    
  测试结果的精确程度由GetTickCount函数的精度决定.其精度大概在百分之一秒.从结果我们可以得出这样的结论.第一,冷启动.NET应用过程所花费的时间比运行相同的应用多出一秒的时间.第二,启动后的程序再运行时,在C++代码大约是C#代码运行时间开销的十分之一.一般这种差别可以忽略不计.    
   
  埃拉托色尼过滤算法测试  
  埃拉托色尼过滤算法测试程序评估基本的整型算法和比较逻辑.这个算法历史悠久,它早在计算机出现之前就已经存在.因此用它来评估人们在各种环境中创建的算法性能具有一定的典型性或代表性.  
  埃拉托色尼过滤算法的C++代码如下:  
  [html]代码三:sieve.cpp  
  #include    
  #include    
  #include    
  #include    
  #include    
   
  using   namespace   std;  
  int   main(int   argc,   char   *argv[])    
  {  
  if   (argc   !=   2)  
  {  
  std::cerr   <<   "Usage:\tsieve   [iterations]\n";    
  return   1;  
  };  
   
  size_t   NUM   =   atoi(argv[1]);  
  DWORD   dw   =   ::GetTickCount();  
  vector   primes(8192   +   1);  
  vector::iterator   pbegin   =   primes.begin ();  
  vector::iterator   begin   =   pbegin   +   2;  
  vector::iterator   end   =   primes.end();  
   
  while   (NUM--)    
  {  
  fill(begin,   end,   1);  
  for   (vector::iterator   i   =   begin;    
      i   <   end;   ++i)  
  {  
  if   (*i)    
  {  
  const   size_t   p   =   i   -   pbegin;  
  for   (vector::iterator   k   =   i   +   p;    
  k   <   end;   k   +=   p)  
  {  
  *k   =   0;  
  }  
  }  
  }  
  }  
   
  DWORD   dw2   =   ::GetTickCount();  
  std::cout   <<   "Milliseconds   =   "   <<   dw2-dw    
  <<   std::endl;  
  return   0;  
  }[/html]    
  下面是埃拉托色尼过滤算法的C#代码:    
  [html]代码四:  
  using   System;  
  namespace   Sieve  
  {  
  class   Class1  
  {  
  static   void   Main(string[]   args)  
  {  
  if   (args.Length   !=   1)  
  {  
  Console.WriteLine("Usage:\tsieve   "  
  "[iterations]");  
  return;  
  }  
   
  int   NUM   =   int.Parse(args[0]);  
  long   dt   =   DateTime.Now.Ticks;    
  int[]   primes   =   new   int[8192+1];  
  int   pbegin   =   0;  
  int   begin   =   2;  
  int   end   =   8193;  
   
  while   (NUM--   !=   0)  
  {  
  for   (int   i   =   0;   i   <   end;   i++)  
  {  
  primes[i]   =   1;  
  }  
   
  for   (int   i   =   begin;   i   <   end;   ++i)  
  {  
  if   (primes[i]   !=   0)  
  {  
  int   p   =   i   -   pbegin;  
  for   (int   k   =   i   +   p;   k   <   end;   k   +=   p)  
  {  
  primes[k]   =   0;  
  };  
  }  
  };  
  };  
   
  long   dt2   =   DateTime.Now.Ticks;  
  System.Console.WriteLine("Milliseconds   =   {0}",    
  (dt2-dt)/10000);  
  }  
  }  
  }[/html]  
  测试的结果并不足以说明那一种环境更快.在这两个语言的测试中,我旨在说明哪一种语言的构造对测试的结果影响最大.当你基于性能的考虑来选择某种语言时,应该直接考虑心需要哪种类型的性能.在这里,埃拉托色尼过滤算法测试的是循环构造以及比较逻辑和整数基本类型的处理.下面是十次测试,每次进行10000次重复的测试结果:    
  表二:过滤算法测试结果  
  序号   C++(~毫秒)   C#(~毫秒)    
  1   1342   2724    
  2   1342   2714    
  3   1342   2724    
  4   1342   2724    
  5   1342   2734    
  6   1342   2724    
  7   1362   2734    
  8   1352   2734    
  9   1362   2724    
  10   1352   2724    
  平均值   1348   2726    
   
  这个结果很能说明问题.整数计算C#所花的时间是C++的两倍.所以对于一个逻辑复杂的服务器来说,使用非受管C++代码比C#代码更适合.  
  上面的C++代码和C#代码之间有一个差别,即C#使用的是本机数组,而C++代码用的是向量模板类,我用本机数组重写了C++代码, 按说应该更快.是结果不是这样,本机C++数组执行用时是1900毫秒.(待续)

posted by William @ 18:16   0 comments
C#与C++的效率之争(转贴1)
C#目前是微软.NET平台首推的应用程序开发语言.C#编写的应用程序必须运行在受控环境(managed)中.与以往非受控(unmanaged)的C++相比,C#应用程序的性能到底如何呢?经过几个方面的性能测试,我们发现C#应用程序的运行速度远远不如非受控C++应用程序.在这场速度的大比拼中,非受控C++具有明显的优势.它将一如既往地成为大多数程序员的最爱.  

          本文拟通过一些正统的和非正统的性能测试方法,对C#和C++程 序进行测试.在这些测试的统计数据中.读者会发现C#程序的性能到底如何.做为程序员,我对C++情有独钟.在我的职业生涯中,一直都在使用Visual   C++.希望本文能给程序员们一点提示,以便在编写不同的应用时选择适合的编程语言.  
          Visual   C++是Win32平台上性能最好的编译器之一,我想这已经成为一种共识.  
  .NET是微软提供的一种新的应用平台.  
  首先我说明一下自己机器的软硬件环境:  
  硬件环境:Dell   Inspiron   3800   G700GT   笔记本电脑CPU/PIII/700,ROM/128MB,HD/12GB.  
  软件环境:Windows   2000   +   SP2,.NET平台   +   Visual   Studio.NET,Office   XP.  
  所有的测试均是在命令行状态下以RELEASE模式编译程序,而非Visual   Studio   IDE集成开发环境, 并在命令行状态下执行程序.没有对编译过程进行任何优化.  
  本文的测试由四个部分组成.其中包括用著名的埃拉托色尼过滤算法(Sieves   of   Eratosthenes)进行的测试及其它的单项测试,单项测试主要的考察.NET框架中特定项目的性能:    
  1.Hello   World   测试  
  .NET框架的一个问题是程序的启动时间.因为.NET框架运行在Win32之上,因此要启动一个.NET框架程序需要额外的启动时间开销 .    
  2.埃拉托色尼过滤算法(Sieve   of   Eratosthenes)测试  
  这个过滤算法是一个古老的寻找素数的方法.因为开发这个算法是为人类所用,因此这个算法很占用CPU资源(非CPU优化),从而能提供非?玫幕�挤从橙宋�蛩?记住,编写程序的总是人.    
  数据库存取测试  
  当今应用程序服务器往往都要用到数据库,所以我觉得用ADO.NET来测试C#的数据库存取性能与用常规ADO测试Visual   C++的数据库存取性能进行比较是很能说明问题的一个好方法.    
  3.XML测试  
  XML是一种最新的并且是流行的技术.因此许多人都会对用C#   和Visual   C++解析XML的性能感兴趣.  
  Hello   World  
  Hello   World测试程序主要是评测加载一个程序及其运行时环境所用的时间.C++的程序运行需要C运行库,从所周知,这个库是相当轻量级的.而C#程序的运行必须要加载.NET框架,从目前的情况看,这个框架无庸置疑不是一个轻量级的.  
  Hello   World程序的C++代码如下:  
  [html]代码一:helloworld.cpp  
    #include    
    int   main(int   argc,   char   *argv[])  
    {  
      std::cout   <<   "Hello   World"   <<   std::endl;  
      return   0;  
    };   [/html]  
  Hello   World程序的C#代码如下:    
  [html]代码二:helloworld2.cs  
    using   System;  
    namespace   HelloWorld  
    {  
    class   Class1  
    {  
      static   void   Main(string[]   args)  
      {  
      Console.WriteLine("Hello   World");  
      }  
      }  
    }   [/html]  
  从这个测试的结果中, 我们可以看到程序在相应环境中的加载时间.对于一个只完成简单任务的程序来说 ,无疑我们需要它能快速加载和退出.Perl脚本是个有代表性的例子,运行这种需要大量的加载时间,从而导致其不能满足基于CGI且面向性能的Web站点的需要.这时,人们常常选择C++程序替Perl脚本.但对于需要长时间处于激活状态的程序,其加载时间相对运行时性能来说就显得并不是那么很重要了.下表是十次测试的结果:  
  表一:Hello   World   测试结果   序号   C++(~毫秒)   C#(~毫秒)    
  1   40   1221    
  2   20   121    
  3   10   130    
  4   10   100    
  5   10   110    
  6   10   130    
  7   10   120    
  8   10   140    
  9   10   150    
  10   20   140    
  平均值   15   235    
  测试结果的精确程度由GetTickCount函数的精度决定.其精度大概在百分之一秒.从结果我们可以得出这样的结论.第一,冷启动.NET应用过程所花费的时间比运行相同的应用多出一秒的时间.第二,启动后的程序再运行时,在C++代码大约是C#代码运行时间开销的十分之一.一般这种差别可以忽略不计.    
   
  埃拉托色尼过滤算法测试  
  埃拉托色尼过滤算法测试程序评估基本的整型算法和比较逻辑.这个算法历史悠久,它早在计算机出现之前就已经存在.因此用它来评估人们在各种环境中创建的算法性能具有一定的典型性或代表性.  
  埃拉托色尼过滤算法的C++代码如下:  
  [html]代码三:sieve.cpp  
  #include    
  #include    
  #include    
  #include    
  #include    
   
  using   namespace   std;  
  int   main(int   argc,   char   *argv[])    
  {  
  if   (argc   !=   2)  
  {  
  std::cerr   <<   "Usage:\tsieve   [iterations]\n";    
  return   1;  
  };  
   
  size_t   NUM   =   atoi(argv[1]);  
  DWORD   dw   =   ::GetTickCount();  
  vector   primes(8192   +   1);  
  vector::iterator   pbegin   =   primes.begin ();  
  vector::iterator   begin   =   pbegin   +   2;  
  vector::iterator   end   =   primes.end();  
   
  while   (NUM--)    
  {  
  fill(begin,   end,   1);  
  for   (vector::iterator   i   =   begin;    
      i   <   end;   ++i)  
  {  
  if   (*i)    
  {  
  const   size_t   p   =   i   -   pbegin;  
  for   (vector::iterator   k   =   i   +   p;    
  k   <   end;   k   +=   p)  
  {  
  *k   =   0;  
  }  
  }  
  }  
  }  
   
  DWORD   dw2   =   ::GetTickCount();  
  std::cout   <<   "Milliseconds   =   "   <<   dw2-dw    
  <<   std::endl;  
  return   0;  
  }[/html]    
  下面是埃拉托色尼过滤算法的C#代码:    
  [html]代码四:  
  using   System;  
  namespace   Sieve  
  {  
  class   Class1  
  {  
  static   void   Main(string[]   args)  
  {  
  if   (args.Length   !=   1)  
  {  
  Console.WriteLine("Usage:\tsieve   "  
  "[iterations]");  
  return;  
  }  
   
  int   NUM   =   int.Parse(args[0]);  
  long   dt   =   DateTime.Now.Ticks;    
  int[]   primes   =   new   int[8192+1];  
  int   pbegin   =   0;  
  int   begin   =   2;  
  int   end   =   8193;  
   
  while   (NUM--   !=   0)  
  {  
  for   (int   i   =   0;   i   <   end;   i++)  
  {  
  primes[i]   =   1;  
  }  
   
  for   (int   i   =   begin;   i   <   end;   ++i)  
  {  
  if   (primes[i]   !=   0)  
  {  
  int   p   =   i   -   pbegin;  
  for   (int   k   =   i   +   p;   k   <   end;   k   +=   p)  
  {  
  primes[k]   =   0;  
  };  
  }  
  };  
  };  
   
  long   dt2   =   DateTime.Now.Ticks;  
  System.Console.WriteLine("Milliseconds   =   {0}",    
  (dt2-dt)/10000);  
  }  
  }  
  }[/html]  
  测试的结果并不足以说明那一种环境更快.在这两个语言的测试中,我旨在说明哪一种语言的构造对测试的结果影响最大.当你基于性能的考虑来选择某种语言时,应该直接考虑心需要哪种类型的性能.在这里,埃拉托色尼过滤算法测试的是循环构造以及比较逻辑和整数基本类型的处理.下面是十次测试,每次进行10000次重复的测试结果:    
  表二:过滤算法测试结果  
  序号   C++(~毫秒)   C#(~毫秒)    
  1   1342   2724    
  2   1342   2714    
  3   1342   2724    
  4   1342   2724    
  5   1342   2734    
  6   1342   2724    
  7   1362   2734    
  8   1352   2734    
  9   1362   2724    
  10   1352   2724    
  平均值   1348   2726    
   
  这个结果很能说明问题.整数计算C#所花的时间是C++的两倍.所以对于一个逻辑复杂的服务器来说,使用非受管C++代码比C#代码更适合.  
  上面的C++代码和C#代码之间有一个差别,即C#使用的是本机数组,而C++代码用的是向量模板类,我用本机数组重写了C++代码, 按说应该更快.是结果不是这样,本机C++数组执行用时是1900毫秒.(待续)

posted by William @ 18:16   0 comments
填满进程的Acrobatinfo.exe
2007年9月11日星期二

填满进程的Acrobatinfo.exe

自从更新了Acrobat 8之后烦恼就不断,浏览器下的PDF预览不难用,也方便,但每次鼠标点击PDF时总会有一个时滞,打开任务管理器,Acrobatinfo进程已经充满了窗口,占用大量资源。这种情况下关机时也经常会出现无法终止Acrobatinfo.exe进程或者Font Capture进程。

我的解决方案:
运行regedit,找到如下键值。
1 REGEDIT4
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Installer\UserData\S-1-5-18\Components\21C0FC0AB3C24344FB30C34266AA5E09]
2 REGEDIT4
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{98D9A6F 1-4696-4B5E-A2E8-36B3F9C1E12C}]
3 REGEDIT4
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\App Paths\AcrobatInfo.exe]
4 REGEDIT4
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Low Rights\ElevationPolicy\{AC76BA86-1033-0000-7760-000000000002}]
5 REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AcroExch.Docum ent]"BrowseInPlace"=-
6 REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AcroExch.Docum ent.7]"BrowseInPlace"=-

删除上边标注的1-4注册表健,清空5、6的键值,问题已经得到解决,只不过少了PDF的预览……you won't need it.

原文: http://www.hostingforum.ca/28079-remove-acrobatinfo-exe-acro-7-windows-explorer-here.html

posted by William @ 19:16   0 comments
About Me

Name: William
Home: Pudong, Shanghai, China
About Me: Here is a collection of my program notes.I'd like to put all my notes and learning together.Welcome anybody to help me to perfect it.
See my complete profile
Previous Post
Archives
Links
© 2005 Crazy ITer Template by Isnaini Dot Com