I am getting terrible performance invoking a C# method from IP. I have a static 
class called Api with this method:

  public static void MakeKey(JET_SESID sesid, JET_TABLEID tableid, string data, 
Encoding encoding, MakeKeyGrbit grbit)

When I call it directly from C# I get about 3M calls/second. In IronPython I 
get only 50,000 calls/second -- a 60X slowdown!

The method is overloaded. When I call these overloads I get good performance (~ 
1M calls/second):
  public static void MakeKey(JET_SESID sesid, JET_TABLEID tableid, int data, 
MakeKeyGrbit grbit)
  public static void MakeKey(JET_SESID sesid, JET_TABLEID tableid, float data, 
MakeKeyGrbit grbit)
  public static void MakeKey(JET_SESID sesid, JET_TABLEID tableid, byte[] data, 
MakeKeyGrbit grbit)
(for the last overload I passed in the string turned into a byte array with 
Encoding.GetBytes())

Things I have tried that didn't help:
 - Changing the name of the method so it was unique.
 - Calling the method using Api.MakeKey.Overloads[...]
 - Calling other methods I have that take string arguments. They were fast.

When I profile the code the time shows up in mscorwks.dll (56%) and 
mscorlib.ni.dll (17%). IronPython is only 8% and my code is 6%.

Can anyone help me work out what is going wrong? I have a short, turn-key repro 
of this. MakeKey is a very commonly used method so having it be so slow is 
crippling.

thanks,
--Laurion


_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to