我正在尝试在运行时创建多个程序集。我正在使用Roslyn来串行编译每个程序集。
我无法利用多线程,因为Roslyn内部使用多线程来编译单个dll。使用Roslyn的单个dll的编译时间少于CodeDom的编译时间,但由于使用CodeDom,我可以并行编译多个dll,CodeDom的实际时间要少得多。
我尝试将Roslyn编译的并发构建选项设置为false,然后在我的代码中使用多线程,但这也没有效率,因为单个dll的编译时间现在更多了。 我想知道是否有解决此问题的方法
时序分析更新:
我有一个8核处理器。我在磁盘上有不同的文件集用于编译72个dll。
在第一种情况下,我使用简单的foreach
循环以串行方式从文件创建语法树,创建引用,创建选项和使用Emit为每个dll编译dll。总共花费488589毫秒
在第二种情况下,我使用带有parallel.ForEach
的{{1}}并创建语法树,创建引用,创建选项以及在循环中使用Emit编译dll。总时间为514481 ms
在这两种情况下,并发构建选项都是默认值:True。
正如您所看到的,使用多线程时没有观察到任何增益。