Ich verwende einen schrecklichen Hack, um einen gesperrten Datentyp im XNA-Framework zu füllen: Es gibt eine interne Methode in einer Struktur, die ich aufrufen möchte, ohne den Garbage Collector zu füttern.Aufrufen einer internen Methode für eine Struktur
Wenn ich immer die Struktur in einer Objektvariablen verpackt und verwendet MethodInfo.Invoke()
, dass Anruf würde ich den Garbage Collector füttern, indem die Parameter Boxen:
private object boxedTouchCollection;
void test() {
MethodInfo addTouchLocationMethod = typeof(TouchCollection).GetMethod(
"AddTouchLocation", BindingFlags.Instance | BindingFlags.NonPublic
);
addTouchLocationMethod.Invoke(
this.boxedState, new object[] { /* parameters being boxed */ }
);
}
Ich bin nicht sicher, ob Delegate.CreateDelegate()
hier verwendet werden kann - Kann ich den ersten Parameter einfach in ein Objekt umwandeln und er wird an der Box-Struktur arbeiten? Oder kann ich meine Struktur unboxed speichern und den ersten Parameter als ref TouchCollection
deklarieren?
delegate void AddTouchLocationDelegate(
ref TouchCollection collection,
int id,
// ...more parameters...
);
private TouchCollection touchCollection;
void test() {
Delegate.CreateDelegate(
typeof(AddTouchLocationDelegate),
typeof(ref TouchCollection), // doesn't compile
addTouchLocationMethod
);
}
Gibt es eine Möglichkeit, ich Delegate.CreateDelegate()
Arbeit machen? Oder muss ich auf die dynamische IL-Generierung zurückgreifen?
Vielen Dank! Ich habe diese Überladung noch nicht versucht. Funktioniert super, null Müll. – Cygon