Jam*_*ris 4 c# parallel-processing autocad
尝试执行一些并行操作时,我收到“尝试读取或写入受保护的内存”的消息。我正在将AutoCad数据库读入内存以进行一些数据挖掘。我可以使用常规for循环执行此操作,但不能使用Parallel.ForEach。有任何想法吗?
Parallel.ForEach(_Files, (currentFile) =>
{
    var _File = currentFile;
    using (Database _Database = new Database(false, true))
    {
        _Database.ReadDwgFile(_File, FileOpenMode.OpenForReadAndAllShare, false, null);           
        _Database.CloseInput(true);
        // Do Stuff
    }
});
如Miiir所述,AutoCAD不支持多线程。
解决方法可能是使用AutoCAD Console(accoreconsole.exe)。如果您有一个外部应用程序(.exe),请使用它来调用控制台的多个实例,您可以在其中NETLOAD一个.NET插件来进行数据挖掘。由于每个控制台实例都是一个单独的应用程序,因此没有多线程。
我在8核计算机上使用AutoCAD Console进行了一些测试。如您所见,与顺序运行相比,整个过程花费的时间更少。检查我写的这份PDF:使用.NET编程通过AutoCAD®Core Console创建新的可能性