using system;
using system.diagnostics;
using system.reflection;
using system.reflection.emit;
using system.runtime.compilerservices;
public class calltest
public class addclass : iadd
[methodimpl(methodimploptions.noinlining)]
public static int static_add(int x)
}public static methodinfo addmethodinfo()
);ilgenerator il = funbuilder.getilgenerator();
il.emit(opcodes.ldarg_0);
il.emit(opcodes.ldc_i4_1);
il.emit(opcodes.add);
il.emit(opcodes.ret);
modbuilder.createglobalfunctions();
methodinfo method = modbuilder.getmethod("add");
return method;
}public static dynamicmethod adddynamicmethod()
);ilgenerator il = dm.getilgenerator();
il.emit(opcodes.ldarg_0);
il.emit(opcodes.ldc_i4_1);
il.emit(opcodes.add);
il.emit(opcodes.ret);
return dm;
}public static iadd addinte***ce()
);//建立方法
methodattributes attribute = basetype.getmethod("add").attributes & ~(methodattributes.abstract);
methodbuilder method = type.definemethod("add", attribute, typeof(int), new type[1] );
ilgenerator il = method.getilgenerator();
il = method.getilgenerator();
il.emit(opcodes.ldarg_1);
il.emit(opcodes.ldc_i4_1);
il.emit(opcodes.add);
il.emit(opcodes.ret);
// 顯式介面方法需要定義 override,而普通實現不需要。
type.definemethodoverride(method, basetype.getmethod("add"));
// 建立型別 myclass。
type myclass = type.createtype();
object o = activator.createinstance(myclass);
iadd iadd = o as iadd;
return iadd;
}static void main(string args)
);time.stop();
dynamicmethod dynamicmethod = adddynamicmethod();
time.reset();
time.start();
for (int i = 0; i < times / 100; )
i = (int)dynamicmethod.invoke(null, new object[1] );
time.stop();
adddelegate dynamicadddelegate = (adddelegate)dynamicmethod.createdelegate(typeof(adddelegate));
time.reset();
time.start();
for (int i = 0; i < times; )
i = dynamicadddelegate(i);
time.stop();
iadd dynamiciadd = addinte***ce();
time.reset();
time.start();
for (int i = 0; i < times; )
i = dynamiciadd.add(i);
time.stop();
console.readline();
}}
函式直接呼叫與反射效能對比
最近發現反射甚是好用,但是效能差距有多大呢。實驗環境是win8.1 64位系統,jre8,i7 4770cpu,8g記憶體。方法很簡單,對於乙個類,分別使用直接呼叫和函式反射的方式呼叫同乙個函式,看執行時間,時間使用system.currenttimemillis 函式僅申請乙個int型區域性變數並...
Vue元件間呼叫的理解 效能對比。
元件間的互動大概有這幾種情況 1.父子間的互動 watch,props,emit,這幾個屬性,可以涵蓋父子元件間的互動。父頁面中 menu aside元件的載入要隨著頁面的projectid的變動而變動,這時候,在menu aside元件中用props屬性接收父傳來的projectid,並用watc...
Delphi 函式傳遞引數的不同方式
在delphi過程 函式中傳遞引數幾個修飾符為const var out。另一種不加修飾符的為預設按值傳遞引數。一 預設方式以值方式傳遞引數 procedure tform1.procnormal value string begin orignum value me lblreturn.capti...