乐筑天下

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

让程序在第一次执行时立即运行

[复制链接]

9

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2017-8-2 17:15:57 | 显示全部楼层 |阅读模式
你好
我的问题是
当我第一次在autocad中运行我的插件时,它需要很长时间来执行
但是之后和每次都需要很短的时间
似乎RAM中有什么东西被激活了。我不知道
我的问题是:我要做什么才能使我的程序在第一次调用时立即运行

谢谢

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

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

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2017-8-2 17:32:24 | 显示全部楼层
在我看来,在加载DLL时,您似乎正在加载一个大数组或列表?可能来自数据库/文本文件
您可以开始使用计时器来排除问题所在。
类似于:
秒表计时器=秒表.StartNew()
//做事
定时器.停止()
调试。Writeline($“经过的时间:{timer.ElapsedMilliseconds}ms.)

一旦你找到了问题所在,你就可以对它进行优化,并决定是在IExtension应用程序的Inititalize()事件中调用它,还是在用户实际调用你的代码时调用它。
回复

使用道具 举报

9

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2017-8-2 17:51:38 | 显示全部楼层
我已经将其翻译为vb.net
调光计时器As Stopwatch=Stopwatch.StartNew()
'do事
计时器。[Stop]()
Debug.Writeline("经过时间:{timer.ElapsedMilliseconds}ms.")
1-我必须在哪里通过此代码?
2-代码做什么?
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2017-8-2 19:20:33 | 显示全部楼层
该代码包含初始化代码的各种元素,Debug.Print语句将告诉您花费了多长时间,当您调试代码时,您将在Visual Studio的输出窗口中看到它。Stopwatch dbTimer=Stopwatch.StartNew();。
//加载数据库。
dbTimer.Stop();。
Debug.Writeline($"正在加载数据库,经过时间:{dbTimer.ElapsedMilliseconds}ms.");。
...。
秒表层定时器=Stopwatch.StartNew();。
//做图层创建。
layerTimer.Stop();。
Debug.Writeline($"创建图层,经过时间:{layerTimer.ElapsedMilliseconds}ms.");调用此代码时,您可能会在调试时在IDE的输出窗口中看到类似的内容:
  1. Loading Database, elapsed time: 5042 ms.
  2. Creating Layers, elapsed time: 15 ms.
这将告诉您延迟正在加载数据库,您可以决定如何更改它,或者将其放在哪里,我不熟悉VB.NETIExtensionApplication.Initialize事件,但那是您在加载应用程序时运行的代码的地方,如果您在该函数中调用loadDatabase,您会在应用程序首次加载到内存时看到暂停,如果您在您创建的其他命令中调用loadDatabase,您会看到暂停。
回复

使用道具 举报

9

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2017-8-3 07:08:00 | 显示全部楼层
我看不到任何东西,但我无法更改任何东西,因为我的程序已建立。
也许我在开始时保留了一个大数组dim…dim….
但如何解释在第二次使用中,它比第一次运行快
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

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

铜币
300
发表于 2017-8-3 08:12:41 | 显示全部楼层
Autocad不会将DLL加载到内存中,直到您在其中执行某些操作。因此,第一次运行命令时,它将加载DLL并执行命令。第二次以及每次加载DLL后,Autocad都会执行您的命令。这就是第一次和第二次执行的时间差。
回复

使用道具 举报

9

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2017-8-3 09:46:04 | 显示全部楼层
在抖动上,您可以对时间做很多事情
https://en.wikipedia.org/wiki/Just-in-time_compilation
请参阅启动延迟和优化
回复

使用道具 举报

9

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2017-8-3 16:56:28 | 显示全部楼层
好吧,你是对的!
我认为没有解决方案。
是否有可能在执行和跟踪之间创建一个子例程来保持或占用用户...
“请稍等!”或者“程序计算!”、或正在使用的鼠标指针等
回复

使用道具 举报

9

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2017-8-3 17:07:47 | 显示全部楼层
samideqlqpart,
有很多不同的东西,它可能只是在没有加载项测试的情况下试图弄清楚的疯狂猜测。
如果您不知道加载的顺序以及加载的方式,那么最简单的事情就是注释部分代码,直到您找到瓶颈。
如果您想缩小范围,那么您的应用程序是否使用ExtensionApplication事件?
应用程序初始化
回复

使用道具 举报

9

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2017-8-3 17:40:23 | 显示全部楼层
ExtensionApplication是将JIT时间移动到的好地方,例如,
如果您的例程使用数据库,您可以运行一两个查询来启动数据库JITTED,
或加载您的winform(无需调用show)...这至少会将烦人的等待转移到启动
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 12:38 , Processed in 0.367159 second(s), 72 queries .

© 2020-2025 乐筑天下

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