【问题标题】:"Attempted to Read or write protected memory" error reading AutoCad databases in parallel并行读取 AutoCad 数据库时出现“尝试读取或写入受保护内存”错误
【发布时间】:2016-02-19 08:19:17
【问题描述】:

当我尝试执行一些并行操作时,我收到“尝试读取或写入受保护的内存”。我正在将 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
    }
});

【问题讨论】:

    标签: c# parallel-processing autocad


    【解决方案1】:

    正如Miiir 所述,AutoCAD 不支持多线程。

    解决方法可以使用 AutoCAD 控制台 (accoreconsole.exe)。如果您有一个外部应用程序 (.exe),请使用它来调用控制台的多个实例,您可以在其中 NETLOAD 一个 .NET 插件来进行数据挖掘。由于每个控制台实例都是一个单独的应用程序,因此没有多线程。

    我在 8 核机器上使用 AutoCAD Console 进行了一些测试。如您所见,整个过程花费的时间更少(与按顺序运行相比)。检查我写的这个 PDF:Using .NET Programming to Create New Possibilities with the AutoCAD® Core Console

    【讨论】:

    • 感谢您发布 PDF。我试图在au.autodesk.com/au-online/overview 找到课程大纲,但该站点对于查找过去的任何内容完全没用。尝试搜索“cp3338”或“核心控制台”。
    【解决方案2】:

    AutoCAD 不支持多线程或并行进程。

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多