C# 如何在从WebAPI调用本机方法时删除不必要的实例化

C# 如何在从WebAPI调用本机方法时删除不必要的实例化,c#,c++,.net,windows,asp.net-core-webapi,C#,C++,.net,Windows,Asp.net Core Webapi,我有一个dotnet核心WebAPI Web服务器,需要执行一个在Win32 C++中编写的本地方法。问题是,每次调用此方法时,它都需要实例化一系列事情,然后才能执行它需要执行的操作,这会增加请求的延迟。(目前使用DLIMPORT访问编译的DLL中的C++方法)。 我想做的是在服务器启动时启动某种长时间运行的进程,它将处理初始化一次,然后让我的WebAPI服务在这个进程中调用一个方法,该方法执行我实际需要立即运行的代码,而不需要每次初始化它的依赖项。由于这是一个web服务器,因此该进程需要能够同

我有一个dotnet核心WebAPI Web服务器,需要执行一个在Win32 C++中编写的本地方法。问题是,每次调用此方法时,它都需要实例化一系列事情,然后才能执行它需要执行的操作,这会增加请求的延迟。(目前使用DLIMPORT访问编译的DLL中的C++方法)。 我想做的是在服务器启动时启动某种长时间运行的进程,它将处理初始化一次,然后让我的WebAPI服务在这个进程中调用一个方法,该方法执行我实际需要立即运行的代码,而不需要每次初始化它的依赖项。由于这是一个web服务器,因此该进程需要能够同时处理多个请求


对此,推荐的方法是什么?我完全可以访问C++代码和WebAPI服务器代码,所以我可以自由地做任何需要做的事情来完成这一点。

你可以在两者之间设置一些IPC基础结构。 一种方法是使DLL COM兼容。也就是说,让DLL成为某个COM类的COM服务器。然后,服务器进程将“CreateInstance”一个类,该类将自动启动本机进程。然后调用将只是一个普通的函数调用,COM将处理RPC

另一种更简单的方法是使用命名内存映射文件。这两个进程都将为此打开一个句柄,您可以在其中存储队列或某些数据结构。服务器进程将推送,而本机进程将弹出。您可以使用windows事件来同步此事件。您可以自己编写或使用类似于Boo::进程的C++部分。我想您可能会找到其他IPC库

你也可以使用管道,我知道C#有一些处理windows管道的简单方法。管道不需要同步,但为了有效地处理大量此类请求,您可能需要本机进程上的多个线程从管道中读取


就我个人而言,如果可能的话,我会选择使用COM。因为它会为你隐藏低级别的IPC内容,这可能是一个陷阱。不过设置时间要长一点。

太棒了,我已经查看了管道选项,并决定继续实施该选项。从我看来,这似乎是最简单的。谢谢你的解释。