【讨论】为什么VB除错会这么慢,怎样提高VB除错的速度?(如果讨论有结果,我会加到200分)

laisiwei 2005-01-22 06:02:04
Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Sub Form_Click()
Dim t As Long, i As Long, a As Long
On Error Resume Next

t = timeGetTime
For i = 1 To 10000
a = Sqr(-1)
Next

Me.Caption = timeGetTime - t
End Sub

以上是测试代码
测试以后发现了一个问题:

用a = Sqr(-1)测试,比a = Sqr(1)要多花10倍时间

更 奇 怪 的 是
上面的代码在VB里执行比编译后快近10倍!
看清楚了,是VB环境里快,而不是编译后快。


大家知道为什么吗?
应该怎样解决?
...全文
392 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickytwice 2005-02-01
  • 打赏
  • 举报
回复
我想应该还有一个现象,就是第一次‘除错’的时间最长,之后要快得多。可以修改试试:
Private Sub Form_Click()
Dim t As Long, i As Long, a As Long
On Error Resume Next

t = timeGetTime
For i = 1 To 10000
a = Sqr(-1)
Me.Caption =“第”+i+“次”+Val( timeGetTime - t)×100
Next


End Sub

我机器条件未足,未曾试过。
呵呵:)
laisiwei 2005-02-01
  • 打赏
  • 举报
回复
up
熊孩子开学喽 2005-01-31
  • 打赏
  • 举报
回复
因为每一次发生错误都要引发错误事件呀.
laisiwei 2005-01-31
  • 打赏
  • 举报
回复
up
zhujiechang 2005-01-30
  • 打赏
  • 举报
回复
你没发现XP提交一个错误更慢吗?
laisiwei 2005-01-30
  • 打赏
  • 举报
回复
up
pikachu8guan 2005-01-30
  • 打赏
  • 举报
回复
up下 我想看看讨论的结果
laisiwei 2005-01-30
  • 打赏
  • 举报
回复
up
laisiwei 2005-01-29
  • 打赏
  • 举报
回复
up
aohan 2005-01-28
  • 打赏
  • 举报
回复
///如果讨论有结果


看来使用的结果也只能如此了,尽量避免,而不是等着错误发生再去resume next
laisiwei 2005-01-28
  • 打赏
  • 举报
回复
up
LicStar 2005-01-28
  • 打赏
  • 举报
回复
up
homezj 2005-01-27
  • 打赏
  • 举报
回复
这个测试,是很意义的。

这种现象可能与MS对VB设计有关,对于是否能明白原因,我觉得不是最重要的,关键这为我们提供了一个参考,经验一点也不比理论的价值低。

至少让我,以后对何时采用,及怎么采用错误处理,有了一个依据。
ljhdi 2005-01-27
  • 打赏
  • 举报
回复
帮顶
laisiwei 2005-01-27
  • 打赏
  • 举报
回复
up
qyii 2005-01-26
  • 打赏
  • 举报
回复
.:RNPA:. 是什么帮派???
laisiwei 2005-01-26
  • 打赏
  • 举报
回复
up
aohan 2005-01-25
  • 打赏
  • 举报
回复
//是VB环境里快,而不是编译后快

这是能理解的,确实建议尽量避免错误,而不是错误发生后再去处理
LicStar 2005-01-25
  • 打赏
  • 举报
回复
up
Chice_wxg 2005-01-24
  • 打赏
  • 举报
回复
猜测:

本机代码出错处理可能要靠SEH来捕获,而SEH进入与退出过程中要伴随大量的数据建立与销毁工作。
而VB本身变量/对象的建立与销毁就是非常慢的事情,所以编译后会慢。

而IDE运行的时候出错异常是不经过SEH的,直接由虚拟机捕获,对变量的建立与销毁会减少很多,所以速度快。


当然,就算本机代码没通过SEH进行异常捕获,那么也需要类似C里面的异常流来处理,同样是需要很多对象的建立与销毁的。


(以上仅为猜测,我用的一台新机器,几乎没有什么工具,也无法验证,如果大家有兴趣也可以
Debug汇编代码研究一下,呵呵)

加载更多回复(15)
  OQL.NET 是一套强类型的数据库对象查询语言 (OQL,Object Query Language),和 SQL 以及其它 OQL 不同的是,OQL.NET 基于宿主语言 (基于 C# 和 VB 等原生 .NET 语言而不是字符串)。OQL.NET 兼容 SQL-92 标准。   OQL.NET 对象查询语言具有良好的设计,无需安装插件,您就能在 IDE 中编写 OQL 时获得严谨而正确的上下文帮助。OQL.NET 对象查询语言能一步一步地引导用户写出正确的、具有兼容性的数据库查询语句。   OQL.NET 是完全面向对象的、强类型的数据库查询语言,您编写的 OQL 查询语句随着您的应用程序一起编译。这样,OQL.NET 对象查询语言使您能在编译时发现数据库查询语句的错误,而不是延迟到运行时才进行艰难的除错工作。当数据库的架构改变时,通过(使用Macrobject CodeAuto 等代码生成工具)重新生成查询类代码,再次编译应用程序时,通过编译错误便能发现需要修改的 OQL 语句。   OQL.NET 对象查询语言支持多种数据库,在切换数据库时,无需变更源代码,也无需重新编译。   使用 OQL.NET 对象查询语言能降低 80% 以上的查询语句编写时间,减少 95% 的查询语句调试时间,并且不带来任何性能损失,同时提高系统的可靠性(一个没有错误查询语句的应用程序)。   使用 OQL.NET 对象查询语言,您可以将一个数据库架构划为多个子架构,便于进行业务和应用的划。OQL.NET 对象查询语言提供的映射机制也能够让开发人员为数据对象及其属性重新命名,这样开发人员就可以采用更加易懂易记的名称,使代码更具可读性。   OQL.NET 对象查询语言采用的级联表达式以及基于宿主语言的中缀表达式写法具有很好的可读性,可以和原始 SQL 语句相媲美。并且 OQL.NET 对象查询语言支持将很长的查询语句开来写,将其公用部拆解出来,十类似于功能解的重构功能(如抽子函数),这样更易读更易维护。 ??OQL.NET 对象查询语言同时支持对象表达式,可以大大简化查询语句的编写。OQL.NET 对象查询语言生成的 SQL 语句不但严谨,并且格式良好。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧