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