我有以下问题:我需要测试具有最高速度性能的算法列表(~300)。
由于每一个都是独一无二的,我将它们创建为静态类并制作了如下所示的 execute() 函数。
每个都有一些固定的参数(相同的数量),最终我可以将其设为 consts;
我能够获得一个 execute() 方法列表,创建一个委托并运行它。
现在在 CI 中会生成一些函数指针,仅此而已。
制作一个函数指针数组。
如何获得整个静态对象的委托,而不仅仅是特定方法?
实际上我需要它们的列表或数组。
我宁愿在初始化()中做一些繁重的工作,比如反射,所以我可以拥有最大值。execute() 运行时的性能;
现在我不确定这是最好的方法,我不是 C# 专家。
感谢您的建议。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace test
{
public static class algorithms
{
public static void initialize()
{
List<Type> types = typeof(algorithms).GetNestedTypes(BindingFlags.Public | BindingFlags.Static).ToList();
foreach ( Type t in types )
{
var method = t.GetMethod("Execute");
var execute = (Func<int, int>)Delegate.CreateDelegate(typeof(Func<int, int>), null, method);
int reply = execute(0x12345678); // I was able to obtain *ptr to execute() for each one
// how can I obtain a *ptr to entire object in order to access it's members too ?
}
}
// list of ~300 algorithms, unique (so no need to have instances)
public static class alg1
{
public static string Name; // each share the same parameters
public static string Alias;
public static int Execute(int data) // the same execute function
{
// but different processing for each algorithm
return 1;
}
}
public static class alg2
{
public static string Name;
public static string Alias;
public static int Execute(int data)
{
return 2;
}
}
public static class alg3
{
public static string Name;
public static string Alias;
public static int Execute(int data)
{
return 3;
}
}
}
}