我正在研究一个看起来像某种时间问题的错误,所以我有点好奇事件在 Delphi 7 中是如何工作的。发生的情况是我们通过 COM 接口将一些数据发送到我们的应用程序并在从 COM 线程引发的事件。似乎事件中包含相当多的代码,执行时间越来越长,一段时间后整个应用程序崩溃。在事件中调用图形并填充到可能会影响时间的大型数组中。我无法发现内存使用量有任何显着增加,也没有机会运行任何分析器来检查泄漏。此外,要测试的显而易见的事情是剥离其中所有代码的事件,看看我们是否可以运行更长的时间。
Delphi中的事件是串行的还是并行的,也就是说,如果我在一个正在执行的时候得到一个新的事件——会发生什么?它是在某种自动线程上并行运行,是被忽略还是排队?
如果它被排队,在应用程序崩溃之前我可以在队列中有多少?
索引到一个大数组需要更长的时间吗?即使它是固定大小的?我认为不应该,所以我正在寻找需要时间的泄漏和分配。如果我通过事件收到一个对象,我应该在事件中还是在“调用”代码中处理它?
在 Delphi 中,哪些东西通常不能很好地扩展?我可以寻找什么会增加执行时间?
最后,由于这是与 COM 相关的,因此任何指向 COM 中常见陷阱的指针都值得赞赏,尽管我意识到这很棘手。不过,我确实掌握了共同初始化。