2017-11-28 6 views
0

が例外をスローするプログラムの実行を継続するのに十分なメモリをスロー言う:RoslynのスクリプトAPIは、私はロスリンScriptingAPIを使用してい

メモリ不足がプログラム

の実行を継続するためにコンパイルする場合私は目の上に、後にそれらを使用するすべてのコンパイル済みスクリプトを保存することができます思っ

foreach (string script in scripts) 
{ 
    var evalFunc = CSharpScript.Create(script, roslynOptions, typeof(ParamsVM)); 
    evalFunc.Compile(); 
    cachedScripts.Add(rule.Formula,evalFunc); 
} 

:このような複数の文字列のスクリプト、一つずつ、データアイテムの残量は、この節約のために〜4GBに達する。
必要に応じて各スクリプトを使用した場合(後でデータ項目を反復処理するとき)、各スクリプトは何度も何度もコンパイルされます。

このようなユースケースのソリューションは何ですか?

+0

あなたは最も頻繁に使用されるキャッシュだけではありませんか? – BugFinder

+0

私は – Dabbas

+0

@BugFinderが持っているすべてのデータセットですべてのスクリプトを使用しています。別のアプリケーションドメインにロードしない限り、このプロセスが作成する「メモリ内DLL」をジェットソンすることは不可能です。 appdomainがコードを読み込むと、それは一方向の処理です。あなたはappdomainsをアンロードすることができます...どの時点で、それはおそらく仕事を得るためにMEFのようなものを採用する方が良いです。 – spender

答えて

0

スクリプトを評価するのにRoslyn Scripting APIを使用するという考えを取り除きました。
私はMicrosoft.CSharp.CSharpCodeProviderの方に行きました。すべてのスクリプトを繰り返して、(文字列として)完全なクラス(すべてusing部分とnamespaceの部分)を作成しました。それをコンパイルしました私が既にコンパイルしたアセンブリを反映し、それに必要な引数を渡すことによって動的に処理します。

関連する問題