Moin zusammen,
ich habe folgende Signatur einer Funktion
So weit so gut, das funktioniert auch. Jetzt wollte ich das ganze als DynamicMethod nachbauen:
Das ganze läuft im Debug, aber nicht im Release. Im Release bekomme ich eine NullReferenceException. Ich weiß, das ist jetzt ein bisschen schwer zu analysieren, aber hat jemand eine Idee, warum es im Debug geht aber im Release nicht?
ich habe folgende Signatur einer Funktion
public static byte[] Test<T>(T ojb) where T : struct {
die mir ein Struct mit [StructLayout(LayoutKind.Sequential, Pack = 1)]
in ein ByteArray umwandeln soll. Weil das im IL schneller gehen sollte habe ich diese manuell im IL mal gebaut.So weit so gut, das funktioniert auch. Jetzt wollte ich das ganze als DynamicMethod nachbauen:
C#-Quellcode
- private static Func<T, byte[]> CreateDelegate() {
- DynamicMethod dm = new DynamicMethod("Serialize" + typeof(T).Name, typeof(byte[]), new[] { typeof(T) }, Assembly.GetExecutingAssembly().ManifestModule);
- dm.DefineParameter(1, ParameterAttributes.None, "obj");
- ILGenerator generator = dm.GetILGenerator();
- generator.Emit(OpCodes.Sizeof, typeof(T));
- generator.Emit(OpCodes.Newarr, typeof(byte));
- generator.Emit(OpCodes.Dup);
- generator.Emit(OpCodes.Ldc_I4_0);
- generator.Emit(OpCodes.Ldelema, typeof(byte));
- generator.Emit(OpCodes.Ldarg_0);
- generator.Emit(OpCodes.Cpobj, typeof(T));
- generator.Emit(OpCodes.Ret);
- return (Func<T, byte[]>)dm.CreateDelegate(typeof(Func<T, byte[]>));
- }
Das ganze läuft im Debug, aber nicht im Release. Im Release bekomme ich eine NullReferenceException. Ich weiß, das ist jetzt ein bisschen schwer zu analysieren, aber hat jemand eine Idee, warum es im Debug geht aber im Release nicht?