using System;
public class Test
{
class A{}
static bool F<T>(T a, T b) where T : class
{
return a == b;
}
static bool F2(A a, A b)
{
return a == b;
}
public static void Main()
{
var a = new A();
var dt = DateTime.Now;
for (int i = 0; i < 100000000; i++)
F<A>(a, a);
Console.WriteLine(DateTime.Now - dt);
dt = DateTime.Now;
for (int i = 0; i < 100000000; i++)
F2(a, a);
Console.WriteLine(DateTime.Now - dt);
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewogICAgY2xhc3MgQXt9CiAgICBzdGF0aWMgYm9vbCBGPFQ+KFQgYSwgVCBiKSB3aGVyZSBUIDogY2xhc3MKICAgIHsKICAgICAgICByZXR1cm4gYSA9PSBiOwogICAgfQoKICAgIHN0YXRpYyBib29sIEYyKEEgYSwgQSBiKQogICAgewogICAgICAgIHJldHVybiBhID09IGI7CiAgICB9CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIGEgPSBuZXcgQSgpOwogICAgICAgIHZhciBkdCA9IERhdGVUaW1lLk5vdzsKZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDAwMDA7IGkrKykKICAgIEY8QT4oYSwgYSk7CkNvbnNvbGUuV3JpdGVMaW5lKERhdGVUaW1lLk5vdyAtIGR0KTsKCmR0ID0gRGF0ZVRpbWUuTm93Owpmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwMDAwMDsgaSsrKQogICAgRjIoYSwgYSk7CkNvbnNvbGUuV3JpdGVMaW5lKERhdGVUaW1lLk5vdyAtIGR0KTsKCX0KfQ==