問題タブ [runtime-compilation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
411 参照

roslyn - Roslyn を使用して実行時に複数のアセンブリをコンパイルする

実行時に複数のアセンブリを作成しようとしています。Roslyn を使用して、各アセンブリをシリアルにコンパイルしています。

Roslyn は単一の dll をコンパイルするために内部的にマルチスレッドを使用しているため、マルチスレッドを活用できません。Roslyn を使用した単一の dll のコンパイル時間は CodeDom のコンパイル時間よりも短くなりますが、CodeDom を使用すると複数の dll を並列コンパイルできるため、CodeDom の実際の時間ははるかに短くなります。

Roslyn コンパイルの並行ビルド オプションを false に設定してから、コードでマルチスレッドを使用しようとしましたが、1 つの dll のコンパイル時間が長くなるため、これも効率的ではありません。この問題の回避策があるかどうか疑問に思っています

タイミング解析の更新:

私は8コアのプロセッサを持っています。72 個の dll をコンパイルするために使用するさまざまなファイル セットがディスク上にあります。

foreach最初のケースでは、ファイルから構文ツリーを作成し、参照を作成し、オプションを作成し、単純なループを使用して、各 dll に対して Emit を使用して dll をコンパイルします。合計 488589 ミリ秒かかります

2 番目のケースでは、parallel.ForEachwithを使用してMaxDegreeOfParallelism = 7構文ツリーを作成し、参照を作成し、オプションを作成し、ループで Emit を使用して dll をコンパイルしています。合計 514481 ミリ秒かかります

どちらの場合も、同時ビルド オプションはデフォルトの True です。

ご覧のとおり、マルチスレッドを使用している間は何のメリットもありません。

0 投票する
1 に答える
143 参照

java - .class ファイルの呼び出し中に実行時に外部 jar を提供する方法

外部jarの例を使用するEclipseで実行時にJavaクラスをコンパイルして実行しようとしています:この場合はJSONライブラリです。

Javaコードを正常にコンパイルしましたが、メソッドを呼び出そうとすると、次のエラーjava.lang.reflect.InvocationTargetExceptionが表示されます

そして、必要なjarをEclipseのビルドパスに追加すると正常に動作します。ビルドとともに外部パスからjarをロードする必要があるため、jarをEclipseのbuildPathに追加したくありません日食で提供されるパス。

JAVACompiler で実行時に外部 jar を含むクラスを呼び出すときに、外部 jar パスを追加する方法はありますか?

この問題で私を助けてください。

これは、外部 jar を持つ実行時にコンパイルおよび実行されるクラスです。

これは、JSONPRINTERCLASS をコンパイルするために実行しているクラスです。

最後に、@ AL4 によって提案された変更後の​​コードです。

しかし、私はまだ得ています

java.lang.Error: 未解決のコンパイルの問題: JSONArray を型に解決できません JSONArray を型に解決できません JSONObject を型に解決できません JSONObject を型に解決できません JSONPRINTERCLASS.printJson(JSONPRINTERCLASS.java:20) でJSONPRINTERCLASS.(JSONPRINTERCLASS.java:7) で sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) で sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) で sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) で) java.lang.reflect.Constructor.newInstance(Constructor.java:423) で java.lang.Class.newInstance(Class.java:442) で StackInLineCompiler.main(StackInLineCompiler.java:137) で

これを手伝ってください