gpt4 book ai didi

c# - 中止对非托管 DLL 的调用

转载 作者:可可西里 更新时间:2023-11-01 08:02:48 24 4
gpt4 key购买 nike

我有一个非托管 DLL,如果输入参数是一个大值,它可以运行很长时间的函数,有时这是可取的,但并非总是如此。

我如何在 C# 中调用此函数以便在需要时可以中止它?

到目前为止,我已经尝试将调用放在一个单独的线程中,但中断和中止似乎都无法停止该进程,该进程以 100% CPU 运行,直到 dll 完成。

是否可以终止正在运行的dll代码?

最佳答案

非托管代码只有在处于“可警告等待状态”时才可中止。当它消耗 100% 的 CPU 周期时不会。 P/Invoking TerminateThread 会起作用,前提是您可以获得线程句柄,而这在 .NET 中变得非常困难。无论如何它都无济于事,你会泄漏线程堆栈。达到 1 兆字节时,您将很快耗尽虚拟内存。即使这只是偶尔需要,您仍然容易遇到重大问题,因为线程已经改变了全局程序状态并且您不知道如何恢复它。

中止非托管代码的唯一好方法是在单独的进程中运行它并使用 Process.Kill() 将其击中头部。操作系统会清理弹片。您需要为 DLL 编写一个小的托管程序,并使用一种进程互操作工具与其对话。套接字、命名管道、.NET 远程处理、WCF,任您选择。

关于c# - 中止对非托管 DLL 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com