public static void DoTests(object hostObject) { var cb = ClassBox.Get(hostObject.GetType()); Console.WriteLine("\n***Basic Tests***"); var d = new JsonDecoder(); // no param WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes( "[\"IncI\", null]"))); //return value WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes( "[\"getI\", null]"))); // param object WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes( "[\"add\", {\"x\": 123, \"y\": 321}]"))); // complex param WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes( "[\"dofoo\", [{ \"a\": \"happy\", \"b\": 123 }, 7]]"))); // bad method call WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes( "[\"badCall\", null]"))); }
public static void PerformanceTest() { int repeats = 10000000; TimeSpan baseTime = TimeSpan.MinValue; Action<string, Action> test = (n, t) => { Console.Write(n + ":"); DateTime startTime; TimeSpan result; startTime = DateTime.Now; for (int j = 0; j < repeats; j++) t(); result = DateTime.Now - startTime; var spaces = new String(' ', 20 - n.Length); if (baseTime == TimeSpan.MinValue) { baseTime = result; Console.WriteLine(spaces + result.ToString()); } else { Console.WriteLine(String.Format("{0}{1} {2}ns", spaces, result.ToString(), (result - baseTime).TotalMilliseconds / repeats * 1000000 )); } }; RPCTest tester = new RPCTest(); EventTest et = new EventTest(); et.ev1 += () => tester.IncI(); byte[] bytes = Encoding.UTF8.GetBytes("[\"IncI\",null]"); ClassBox callbox = ClassBox.Get(tester.GetType()); JsonDecoder d = new JsonDecoder(); d.Parse(bytes); var dynamicFunc = tester.GetType().GetMethod("IncI").CreateDynamicFunc(); var eventFunc = et.GetType().GetEvent("ev1").CreateDynamicFunc(); test("Direct", () => tester.IncI()); test("DynamicFunc", () => dynamicFunc(tester, null)); test("DynamicFunc(Event)", () => eventFunc(et, null)); test("CallBox(Direct)", () => callbox.Call(tester, "IncI", null)); test("CallBox", () => callbox.SerializedCall(tester, d)); test("CallBox(Full)", () => callbox.SerializedCall(tester, d, bytes)); }