关闭一个c# / c++ DLLImport或者至少释放它的堆内存?



我有一个c# . net框架应用程序,它通过DLLImport调用一个非托管的c++ DLL,来解析用户给出的一堆文件并执行一些操作。

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

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

我不确定是否关闭DLL后,我已经完成了我的解析是可能的。是否有其他方法可以完成此任务,而不必在应用程序运行的整个时间内保持内存中分配的所有路径?

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

在流程的生产者端,设置一个包含文件名的List或数组。如果列表变得太大(真的,真的很大,所以它会对可用内存造成压力),你可能想要用BlockingCollection和Queue的组合来替换它,这样生产者就可以被限制,直到处理管道中的项目数量低于阈值。

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

因为这是一个UI应用程序,我猜你的工作线程应该是分开的。对于每个处理过的文件,在UI表单上执行. invoke()来更新进度条。

相关内容

最新更新