首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在客户站点中比较.NET性能与VB 6性能的最佳方法是什么?

在客户站点中比较.NET性能与VB 6性能的最佳方法是什么?
EN

Stack Overflow用户
提问于 2008-10-24 19:38:40
回答 8查看 1.5K关注 0票数 3

两个问题:

  1. 有人能告诉我比较.NET性能和VB 6性能的无偏数据吗?我已经找过了,但却很难找到。
  2. 当应用程序在客户站点上运行时,比较.NET性能和VB 6性能的最佳方法是什么?

我们有一个WindowsForms客户端服务器应用程序(为2.0编写,很快升级到3.5SP 1),与之前的VB 6版本相比,某些客户抱怨它的性能“慢”。我知道,“慢性能”是非常模糊和普遍的,但假设.NET代码可能比VB 6代码慢,因为.NET运行在VM中,这是真的吗?我用C#编写了100%的代码,所以它不是由某个第三方或向导移植的。

并不是所有的顾客都会抱怨,所以我们怀疑一些环保的东西。我们唯一的选择是衡量客户网站的业绩吗?我们的一些客户在Novell网络上使用Windows 2003上的Server 2005。他们会看到与Windows网络上类似的机器相比,数据访问性能会有很大不同吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-10-24 20:04:45

我需要提到的第一件事是,.Net代码从未在VM中运行过。虽然.Net程序确实编译为IL,这在某种程度上类似于Java的ByteCode,但重要的区别是,在应用程序启动之前,IL也被编译成完全的原生代码,而不是由VM解释。

接下来是.Net/VB6的比较。我无法指出具体的数据,但从个人经验来看,这取决于你在做什么。

为了说明这一点,让我们考虑六个不同的基准测试应用程序,每个应用程序都有一个vb6和.Net版本。每个应用程序选择一个特定的操作,执行100,000次,然后记录所花费的时间。请注意,这是一个思想实验:我还没有看到真正的应用程序的结果。但我觉得我对这两个平台的优势和弱点有一种感觉。

  • 应用程序A做一些严重的cpu-沉重的数字处理.在这种情况下,我必须相信这里的结果几乎是相同的。VB6和.Net都编译成本机代码,因此cpu mult指令是相同的。也就是说,如果您不使用Option Strict,您可能很快就会在任何一个平台上陷入麻烦。由于您使用了C# (本质上始终是Option Strict),这将给您的.Net代码带来优势。
  • 应用程序B退出并从数据库中检索一个值。同样,结果可能非常接近,尽管我不得不给.Net一个非常小的优势,原因有两个:它使用了一个本机sql客户机,据说它的速度要快一些,而且它可以实现自动连接池之类的功能,并且可以更容易地筛选出诸如一次连接和重复使用该连接之类的内容,而不是重复连接。但是,如果你把苹果和苹果的代码相提并论,两者可能会非常接近。
  • 应用程序C反复显示和隐藏表单。在这里,我必须给vb6点头。它是基于一个较老的,不那么耀眼的小部件集,坦率地说,这将是更便宜的渲染。而且,WinForms组件并不以速度如此之快而闻名。但是,两者之间的差别可能没有您想象的那么大,而且您可能也没有完全重新绘制经常使用的表单。这很可能是用户抱怨的缓慢之处。
  • 应用程序D是基于字符串操作的,这里我必须给.Net点头。VB6和.Net都以缓慢的字符串操作而闻名。然而,.Net提供了许多在vb6中根本不可用的工具,以帮助开发人员克服缓慢的问题。尽管如此,如果你不知道这些工具,糟糕的字符串操作选择很容易使你的应用程序陷入无用的工作。这也可能导致用户抱怨。
  • 应用程序E将反复将Xml文档加载到内存中。再一次,我不得不认为.Net会有优势。首先,vb可用的xml工具充其量是原始的。我觉得不太可能他们没有得到明显的改善。此外,.NET的垃圾收集器非常智能,它在加载期间具有优势或分配和释放内存。然而,我认为这里最大的事情是磁盘速度,这意味着差别不会有那么大。
  • 应用程序F将反复启动.Net或vb6程序,等待它就绪(对于“准备”的某些定义),然后关闭它。在这里,vb6可能有优势,原因有两个。首先,.Net必须在第一次运行时将IL编译为字节码。谢天谢地,这只是第一次。.Net应用程序还必须加载任何引用的程序集。相比之下,VB6运行时要小得多。但是,这通常只有在您第一次在特定机器上启动应用程序时才是正确的,并且有一些方法可以预编译.Net代码。这也可能导致人们感觉到的缓慢。

重要的一点是,对于所有这些应用程序,.Net应用程序可能会占用更大的内存空间。由于某些原因,开发人员倾向于认为这是一个糟糕的性能特征,而实际上恰恰相反。如果您的应用程序使用更多的内存,那么它可能花在磁盘上的时间更少,而磁盘的运行速度则要慢得多。它也可能缓存更多,这节省了cpu时间。具体来说,对于.Net来说,它会将分配/去分配操作保存到更重要的时期,或者当pc处于空闲状态时。

我没有时间,但有趣的是,有人使用StopWatch实现(至少对于.Net端)来获得每一个方面的真正基准。

票数 4
EN

Stack Overflow用户

发布于 2008-10-24 19:42:57

性能很大程度上取决于你在做什么。

如果可能的话,到现场观看客户使用应用程序。找出经济放缓的原因,然后对其进行分析--最好有类似数量的数据等等。

检查客户端和客户端服务器的性能--找出到底是什么导致了问题。检查网络配置和健康-愚蠢的设置有时可以保持工作,但痛苦缓慢。

票数 4
EN

Stack Overflow用户

发布于 2008-10-24 19:52:25

  1. 我从来没有找过这样的数据。您可能会看到规范的“宠物店”应用程序,它经常用于基准测试。它可能在开发平台的两种版本中都可以使用。不过,我怀疑第二条答案要重要得多。谁在乎宠物店跑得快。重要的是你客户的应用程序。
  2. 大多数性能问题都与数据库和/或网络有关。如果您在不同版本之间进行了重要的数据库更改,我将首先使用SQL跟踪/分析工具对这些版本进行分析,或者只是在键procs/sql上运行一些简单的测试来支持所谓的“慢性能”表单。

如果我对你的理解是正确的,那么对某些客户来说似乎没什么问题,但在另一些客户看来却不太好,有人在对你说,.NET和VB6都很好,非常感谢。客户端之间的网络差异无疑是一个关键的差异。服务器操作系统、交换机速度和网络基础设施等但我敢打赌,这与.NET和VB6无关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/234994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档