关闭 C#/C++ DLLImport 或至少释放其堆内存?

Close a C#/C++ DLLImport or atleast deallocate its heap memory?

我有一个 C# .NET Framework 应用程序,它通过 DLLImport 调用非托管 C++ DLL,以解析用户提供的一堆文件并执行一些操作。

我希望在我的 C# 应用程序上有一个进度条,因为此文件解析可能是一个漫长的过程。我想到的最好的方法是一次解析几个文件,然后 return 到 C# 代码,这样我就可以更新进度条。

但是,这需要我在 C++ DLL 的堆上分配一些内存,这样我就不必在每次必须再次调用 C++ 函数时将所有 10,000 多个文件路径作为参数传递。

我不确定是否可以在完成解析后关闭 DLL。有没有其他方法可以完成此任务,而不必在应用程序 运行?

的整个时间内将所有路径保留在分配的内存中

既然你已经确认文件是独立的,你应该尝试并行化操作。

在流程的生产者端,设置一个列表或一个包含文件名的数组。如果列表变得太大(真的,真的很大,所以它强调可用 RAM),您可能想用 BlockingCollection 和 Queue 的组合替换它,这样生产者可以被限制,直到处理管道中的项目数量低于阈值.

在此管道的另一端,启动一个工作线程(内联或作为单独的工作线程),它将按顺序或 .AsParallel() 从集合中读取项目,并将它们传递给非托管库进行处理。

由于这是一个 UI 应用程序,我想您的工作线程应该是独立的。在处理每个文件后,在 UI 表单上执行 .Invoke() 以更新进度条。