Здравствуйте. помогите повысить быстродействие кода:
static double computer(string expression, string x)
{
// компилятор кода C#
ICodeCompiler cs = (new CSharpCodeProvider().CreateCompiler());
// параметры компиляции: DLL в памяти
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.GenerateExecutable = false; // создать DLL
cp.GenerateInMemory = true; // создать в памяти
// текст программы на C#:
string code = string.Empty;
code += "using System;\r\n ";
code += "namespace CSEvaluator\r\n";
code += "{ public class Evaluate\r\n";
code += " { public double GetResult()\r\n{double x = " + x + ";\r\n";
code += " return "+ expression +";\r\n }";
code += " private double exp(double x){ return(Math.Exp(x)); }";
code += " private double log(double x){ return(Math.Log(x)); }";
code += " private double log(double x,double s){ return(Math.Log(x,s)); }";
code += " private double pow(double x, double y){ return(Math.Pow(x,y)); }";
code += " private double sin(double x){ return(Math.Sin(x)); }";
code += " private double cos(double x){ return(Math.Cos(x)); }";
code += " private double pi(){ return(Math.PI); }";
code += " }\r\n";
code += "}";
text += code;
// компиляция исходного кода и получение сборки
CompilerResults cr = cs.CompileAssemblyFromSource(cp, code);
if (cr.Errors != null && cr.Errors.Count > 0) // ? ошибки
{
for (int i = 0; i < cr.Errors.Count; i++)
text += "Col {0} - {1}" + cr.Errors[i].Column + cr.Errors[i].ErrorText;
return -6666;
}
try // создать объект и вызвать метод для вычисления выражения
{
object ob = cr.CompiledAssembly.CreateInstance("CSEvaluator.Evaluate");
return ((double)ob.GetType().InvokeMember("GetResult", BindingFlags.InvokeMethod, null, ob, new object[] { }));
}
catch (Exception ex) { text += ex.Message; return (0); }
}
Необходимо произвести вычисления минимизации функции. так что данная функция вызывается много раз(например, при методе дихотомии 10 итераций, вызывается 20 раз), а вычисляется минимум функции за 12 секунд. можно ли сократить?
подскажите какая часть кода более трудоемкая.
можно ли создать dll глобально а потом вычислять getresult с параметром string x, передаваемой из texbox и намного ли быстрей будет в таком случае?
28.09.10 18:41: Перенесено модератором из 'Алгоритмы'. Добавил разметку и убрал двойной интервал. — Кодт