乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 139|回复: 10

呜呼,第二个话题。速度测试。

[复制链接]

14

主题

194

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2003-10-31 02:21:08 | 显示全部楼层 |阅读模式
在Vlisp黑客论坛上,我们正在测试entmake是否比ActiveX快(好像你不知道)。无论如何,Stig建议我使用ActiveX函数并将其转换为vba,看看它是否更快。好吧,我已经做了所有我能做的,需要你们的帮助。我将发布模块。你们能帮我完成吗。有几件事我不太懂,比如如何让插入点工作以及一些定时器项目。谢谢。
  1. Option Explicit
  2. Function starttimer()
  3. Dim time As Long
  4. time = ThisDrawing.GetVariable("date")
  5. End Function
  6. Function endtimer(func)
  7. Dim time As Long
  8. Dim seconds As Long
  9. time = ThisDrawing.GetVariable("date" - time)
  10. seconds = (time - time * 86400#)
  11. output seconds func
  12. End Function
  13. Function output()
  14. msgbox ("Timed result: ",vbokonly)
  15. End Function
  16. Sub instest()
  17. Dim inspt(0 To 2) As Variant
  18. Dim count As Integer
  19. Dim bname As String
  20. Dim blkref As AcadBlockReference
  21. Set inspt = ThisDrawing.Utility.GetPoint(0)
  22. Set blkref = ThisDrawing.ModelSpace.InsertBlock _
  23.             (inspt, "circ", 1#, 1#, 1#, 0)
  24. starttimer
  25. For count = 1 To 1000
  26.     blkref
  27. Next count
  28. endtimer
  29. End Sub

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2003-10-31 04:56:58 | 显示全部楼层
哦,今天是星期五,我回来了,但我们星期五只工作到下午1点。因此,在此期间,我将尽我所能…
  1. Dim inspnt As Variant
  2. Me.Hide
  3. inspnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")

将帮助您使用getpoint函数<我从来没有用过定时器,所以我需要研究一下,达伦
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2003-10-31 06:19:11 | 显示全部楼层
这是否有助于您使用计时器位
  1. Dim StartTime As Long
  2. Dim EndTime As Long
  3. Dim TotalTime As Long
  4. _______________________________________
  5. Private Sub StartTimeR()
  6. StartTime = Timer
  7. End Sub
  8. _______________________________________
  9. Private Sub EndTimeR()
  10. EndTime = Timer
  11. End Sub
  12. _______________________________________
  13. Private Sub CommandButton1_Click()
  14. StartTimeR
  15. 'do your stuff in here
  16. EndTimeR
  17. TotalTime = EndTime - StartTime
  18. TextBox1.Text = TotalTime
  19. End Sub

回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2003-10-31 08:11:30 | 显示全部楼层
对于插入测试,您可以使用
  1. Public Function InsertTest()
  2.   Dim i As Integer
  3.   Dim lngStart As Long
  4.   Dim lngEnd As Long
  5.   Dim InsPt(0 To 2) As Double
  6.   Dim mspace As AcadModelSpace
  7.   Set mspace = ThisDrawing.ModelSpace
  8.   
  9.   lngStart = GetTickCount
  10.   For i = 1 To 1000
  11.     mspace.InsertBlock InsPt, "Circ", 1, 1, 1, 0
  12.   Next i
  13.   
  14.   lngEnd = GetTickCount
  15.   MsgBox "Total Time = " & CStr((lngEnd - lngStart) / 1000#)
  16. End Function

InsPt将默认为0,0,0,并且您不需要设置块引用(这只会减慢您的速度)
对于计时器,我喜欢使用API GetTickCount。它以千分之一秒计。有一种更精确的计时器,但更难使用
在标准模块中,插入此定时器代码
  1. Option Explicit
  2. Declare Function GetTickCount Lib "kernel32" () As Long

回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2003-10-31 09:24:01 | 显示全部楼层
只是注意:计时器需要基于日期和Daron显示的公式。否则比不上AutoLISP。如果VBA在访问sysvars时也较慢,那就是运气不好了
回复

使用道具 举报

14

主题

194

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2003-10-31 10:25:32 | 显示全部楼层
好的,这是我到目前为止所得到的。
  1. Dim StartTime As Long
  2. Dim EndTime As Long
  3. Dim TotalTime As Long
  4. Private Sub starttimer()
  5. StartTime = Timer
  6. 'time = ThisDrawing.GetVariable("date")
  7. End Sub
  8. Private Sub endtimer()
  9. 'Dim seconds As Long
  10. 'time = ThisDrawing.GetVariable("date" - time)
  11. 'seconds = (time - time * 86400#)
  12. 'output seconds func
  13. EndTime = Timer
  14. End Sub
  15. 'Function output()
  16. 'MsgBox "Total Time = & CStr((lngEnd - lngStart) / 1000#)"
  17. 'End Function
  18. Sub instest()
  19. Dim inspt(0 To 2) As Double
  20. Dim count As Integer
  21. 'Dim lngStart As Long
  22. 'Dim lngEnd As Long
  23. Dim MSpace As AcadModelSpace
  24. Set MSpace = ThisDrawing.ModelSpace
  25. 'lngStart = GetTickCount
  26. 'Set blkref = ThisDrawing.ModelSpace.InsertBlock _
  27. '            (inspt, "circ", 1#, 1#, 1#, 0)
  28. starttimer
  29. For count = 1 To 1000
  30.     MSpace.InsertBlock inspt, "Circ", 1, 1, 1, 0
  31. Next count
  32. 'lngEnd = GetTickCount
  33. endtimer
  34. End Sub
  35. 'Declare Function GetTickCount Lib "kernel32" () As Long

感谢戴夫和亨迪。我从你们俩那里拿走了我所能得到的东西,它现在在0,0,0上插入了1000个“circ”物体。我无法弄清楚的是Hendie的:
  1. Private Sub commandButton1_Click()
  2. StartTime
  3. instest
  4. EndTime
  5. TotalTime = EndTime - StartTime
  6. TextBox1.Text = TotalTime
  7. End Sub

我把它放在哪里。我在模块中尝试了它,然后以一种形式进行了尝试。我在两个地方都想不通。
回复

使用道具 举报

14

主题

194

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2003-10-31 10:35:42 | 显示全部楼层
这就是戴夫所说的。我不知道该怎么处理定时器。它在模块中,函数也是如此,但它不起作用
  1. Option Explicit
  2. Declare Function GetTickCount Lib "kernel32" () As Long
  3. Public Function InsTest()
  4. Dim inspt(0 To 2) As Double
  5. Dim i As Integer
  6. Dim lngStart As Long
  7. Dim lngEnd As Long
  8. Dim MSpace As AcadModelSpace
  9. Set MSpace = ThisDrawing.ModelSpace
  10. lngStart = GetTickCount
  11. For i = 1 To 1000
  12.     MSpace.InsertBlock inspt, "Circ", 1, 1, 1, 0
  13. Next i
  14. lngEnd = GetTickCount
  15. End Function

不过,它的工作速度非常快。他们两个。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2003-10-31 14:10:02 | 显示全部楼层
Daron,
The Declare 需要位于标准模块中,而不是 ThisDrawing 类模块中。
代码的其余部分可以放在任一位置。
希望这是有道理的。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2003-10-31 14:16:55 | 显示全部楼层
到目前为止,在您的测试中,使用sysvar“DATE”作为计时器
  1. Public Function InsertTest()
  2.   Dim i As Integer
  3.   Dim StartTime As Variant
  4.   Dim EndTime As Variant
  5.   
  6.   Dim lngStart As Long
  7.   Dim lngEnd As Long
  8.   Dim InsPt(0 To 2) As Double
  9.   Dim mspace As AcadModelSpace
  10.   Set mspace = ThisDrawing.ModelSpace
  11.   
  12.   StartTime = ThisDrawing.GetVariable("DATE")
  13.   
  14.   'lngStart = GetTickCount
  15.   For i = 1 To 1000
  16.     mspace.InsertBlock InsPt, "Circ", 1, 1, 1, 0
  17.   Next i
  18.   EndTime = ThisDrawing.GetVariable("DATE")
  19.   
  20.   'lngEnd = GetTickCount
  21.   MsgBox "Total Time = " & CStr((EndTime - StartTime) * 86400)
  22. End Function

的函数是相同的。
回复

使用道具 举报

14

主题

194

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2003-10-31 14:45:42 | 显示全部楼层
尽管我感觉速度更快,但上述功能的时间是:
总时间=0.984987616539001
,这在我的机器上。让我们看看它在其他测试机器上是如何运行的。我将在lisp线程中发布代码,并让其他人测试它。我们将把它作为SCMDave的版本放进去。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:20 , Processed in 0.414103 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表