我的.NET程序需要运行大量使用第三方库(32位)的算法,其中大部分是非托管代码。我想尽我所能驱动CPU,因此代码并行运行多个线程来划分工作。在.NET中父进程和子进程之间的IPC建议?
我发现同时运行所有这些线程会导致临时内存尖峰,导致进程的虚拟内存大小接近2 GB的限制。这个内存很快就会被释放回来,但偶尔如果有足够的线程一次输入错误的代码段,这个过程就会跨越“红线”,并且非托管代码或.NET代码会遇到内存不足错误。我可以减少线程的数量,但是我的CPU使用率并不像我想的那么高。
我想创建工作进程而不是工作线程,以帮助避免内存不足错误,因为这样做会使每个执行线程拥有自己的2 GB虚拟地址空间(我的机器有很多RAM)。我想知道在.NET中的进程之间传递输入和输出的最好/最简单的方法是什么?
文件系统是一个明显的选择。我习惯于从我的UNIX背景共享内存,命名管道等。是否有我应该使用的Windows或.NET特定机制?
使用32位操作系统,您还可以通过在2000/XP中使用/ 3GB boot.ini开关和在Vista/7中使用IncreaseUserVa,为应用程序添加另一千兆字节的可用内存。 – 2010-04-28 10:01:57