一段时间后缓慢P/调用

本文关键字:调用 缓慢 一段时间 | 更新日期: 2023-09-27 18:12:03

我正在使用一个c#库,它就像一个非托管库的包装器。这个库依赖于P/Invoke。

我遇到了一些奇怪的事情:在我的WinForms应用程序中,我有一个按钮,当我按下它时,它从1迭代到N,并且在每次迭代中,它都会调用这个库。

每次我按下按钮时(不关闭应用程序),从函数调用方法的时间在第一次迭代中是恒定的(大约半秒),但对于其余的迭代,它变化很大,从半秒到大约2分钟。

每次迭代的工作都是相同的,所以这是不可理解的。

我注意到当库调用非托管函数时,会出现这种慢速。

知道它可以是什么,我该如何改进它吗?

提前感谢!

-edit-注意,每次我按下按钮再次循环的第一次迭代是快速的,但我调用的对象已经初始化(它是一个全局静态变量)!

-edit2-到目前为止,我设法通过从专用线程完成对非托管函数的所有调用来解决这个问题。然而,我仍然不明白为什么主GUI线程不能处理它(没有其他线程进行调用)。

一段时间后缓慢P/调用

p/Invoke应该是一个普通的库调用操作。你的意思是从管理到非管理的转变是问题所在。然而,我从来没有发现这是一个问题。

更有可能是本机代码库正在停止运行。可能是等待释放资源,比如互斥锁或文件锁,这会在后面的调用中超时?确保你的函数原型是正确的,并且你没有收到异常,因为堆栈不平衡或类似的