使用Roslyn在运行时编译多个程序集

时间:2018-02-26 09:04:19

标签: roslyn codedom runtime-compilation

我正在尝试在运行时创建多个程序集。我正在使用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。

正如您所看到的,使用多线程时没有观察到任何增益。

0 个答案:

没有答案