让程序在第一次执行时立即运行
你好我的问题是
当我第一次在autocad中运行我的插件时,它需要很长时间来执行
但是之后和每次都需要很短的时间
似乎RAM中有什么东西被激活了。我不知道
我的问题是:我要做什么才能使我的程序在第一次调用时立即运行
谢谢
**** Hidden Message ***** 在我看来,在加载DLL时,您似乎正在加载一个大数组或列表?可能来自数据库/文本文件
您可以开始使用计时器来排除问题所在。
类似于:
秒表计时器=秒表.StartNew()
//做事
定时器.停止()
调试。Writeline($“经过的时间:{timer.ElapsedMilliseconds}ms.)
一旦你找到了问题所在,你就可以对它进行优化,并决定是在IExtension应用程序的Inititalize()事件中调用它,还是在用户实际调用你的代码时调用它。 我已经将其翻译为vb.net
调光计时器As Stopwatch=Stopwatch.StartNew()
'do事
计时器。()
Debug.Writeline("经过时间:{timer.ElapsedMilliseconds}ms.")
1-我必须在哪里通过此代码?
2-代码做什么? 该代码包含初始化代码的各种元素,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的输出窗口中看到类似的内容:Loading Database, elapsed time: 5042 ms.
Creating Layers, elapsed time: 15 ms.这将告诉您延迟正在加载数据库,您可以决定如何更改它,或者将其放在哪里,我不熟悉VB.NETIExtensionApplication.Initialize事件,但那是您在加载应用程序时运行的代码的地方,如果您在该函数中调用loadDatabase,您会在应用程序首次加载到内存时看到暂停,如果您在您创建的其他命令中调用loadDatabase,您会看到暂停。
我看不到任何东西,但我无法更改任何东西,因为我的程序已建立。
也许我在开始时保留了一个大数组dim…dim….
但如何解释在第二次使用中,它比第一次运行快
Autocad不会将DLL加载到内存中,直到您在其中执行某些操作。因此,第一次运行命令时,它将加载DLL并执行命令。第二次以及每次加载DLL后,Autocad都会执行您的命令。这就是第一次和第二次执行的时间差。 在抖动上,您可以对时间做很多事情
https://en.wikipedia.org/wiki/Just-in-time_compilation
请参阅启动延迟和优化 好吧,你是对的!
我认为没有解决方案。
是否有可能在执行和跟踪之间创建一个子例程来保持或占用用户...
“请稍等!”或者“程序计算!”、或正在使用的鼠标指针等 samideqlqpart,
有很多不同的东西,它可能只是在没有加载项测试的情况下试图弄清楚的疯狂猜测。
如果您不知道加载的顺序以及加载的方式,那么最简单的事情就是注释部分代码,直到您找到瓶颈。
如果您想缩小范围,那么您的应用程序是否使用ExtensionApplication事件?
应用程序初始化
ExtensionApplication是将JIT时间移动到的好地方,例如,
如果您的例程使用数据库,您可以运行一两个查询来启动数据库JITTED,
或加载您的winform(无需调用show)...这至少会将烦人的等待转移到启动
页:
[1]
2