ユーザーが条件を作成してデータベースに保存できるという要件がありました
たとえば。if(FB > 5000) then 100 でなければ 200
ユーザーは数式を作成できますが、私の主な主な問題はその数式を実行することです
そのため、実行時FB
に特定の値に置き換えられ、適切な文字列が生成されます
つまり、int a; if(6000 > 5000) {a= 100}else {a= 200}
実行時に上記のメソッドを実行するために、私は使用しましたCSharpCodeProvider
CSharpCodeProvider c = new CSharpCodeProvider();
ICodeCompiler icc = c.CreateCompiler();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
//cp.CompilerOptions = "optimize";
cp.GenerateInMemory = true;
StringBuilder sb = new StringBuilder("");
sb.Append("using System;\n");
sb.Append("namespace CSCodeEvaler{ \n");
sb.Append("public class CSCodeEvaler{ \n");
sb.Append("public double EvalCode(){\n");
sb.Append(condition);
sb.Append("return cond1; \n");
sb.Append("} \n");
sb.Append("} \n");
sb.Append("}\n");
CompilerResults cr = icc.CompileAssemblyFromSource(cp, sb.ToString());
if (cr.Errors.Count > 0)
{
//Log Errors
return 0;
}
System.Reflection.Assembly assembly = cr.CompiledAssembly;
object o = assembly.CreateInstance("CSCodeEvaler.CSCodeEvaler");
Type t = o.GetType();
MethodInfo mi = t.GetMethod("EvalCode");
object s = mi.Invoke(o, null);
それも正常に動作していますが、私の問題は時間がかかりすぎることです。つまり、パフォーマンスが非常に遅いため、同じことを達成するための代替手段はありますか???