我有以下的代码实例化一个注册的COM对象
private dynamic server = null // Global variable.
...
Type type = Type.GetTypeFromProgID("Svr.GrpCall");
this.server = Activator.CreateInstance(type);
我可以调用这个COM /方法dynamic
蛮好用很直观的符号对象
string expectedResult = this.server.GroupInit(someString, someBoolean);
对于单电话呼叫通过动态语言运行时(DLR)这些方法的性能是宜居。 然而,对于一个要求,我需要使用双for
环路成千上万的记录,它使用一个方法,返回COM对象void
for (int i = 0; i < MAXREC; i++)
for (int j = 0; j < MAXFIELDS; j++)
this.server.MakeRecord(s1, s2, str);
这是大规模慢。 我意识到这一点,埃里克利珀的回答https://stackoverflow.com/a/7480977/626442给出了这样的性能瓶颈的确切原因。
为了解决这个问题我试图定义一个全局Action
的MakeRecord
方法是在压力下
private Action<short, short, string> makeRecord;
其中,该计划是在上使用此for循环。 使用此之前Action
,我试图第一初始化服务器(如上所述),然后将分配makeRecord
使用代表到COM方法
Type type = Type.GetTypeFromProgID("Svr.GrpCall");
this.server = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("MakeRecord");
makeRecord = (Action<short, short, string>)Delegate.CreateDelegate(type, methodInfo);
但type.GetMethod("MakeRecord")
将返回null
。 所以,我的问题是,
如果这是加快我的右边方法
dynamic
调用,我怎么能在COM方法分配MakeRecord
到我的Action
代表?如果这不是加快我的右边方法
dynamic
调用,究竟是什么?
谢谢你的时间。
我也试着这样做
object o = Activator.CreateInstance(type);
MethodInfo methodInfo = o.GetType().GetMethod("MakeRec");