Jestem autorem emulatora psp wykonanego w języku C#.DynamicMethod prelink
Generuję dużo "DynamicMethod" przy użyciu ILGenerator. Przekształcam kod zestawu w AST, a następnie generuję kod IL i buduję ten DynamicMethod. Robię to w innym wątku, więc mogę generować nowe metody, podczas gdy program wykonuje inne, aby mógł działać płynnie.
Moim problemem jest to, że generowanie kodu natywnego jest leniwy, więc kod maszyny jest generowany, gdy funkcja jest wywoływana, a nie podczas generowania IL. Tak więc generuje w wątku wykonywania programu, generowanie kodu rodzimego jest wyjątkowo powolne, ponieważ jest to krok asm-> ast-> il.
Próbowałem metody Marshal.Popier, że jest suposed do generowania kodu maszyny przed wykonaniem funkcji. Działa na Mono, ale nie działa na MS .NET.
Marshal.Prelink(MethodInfo);
Czy istnieje sposób prelinkowania DynamicMethod na MS .NET?
Pomyślałem, że dodanie funkcji boolowskiej do funkcji, która jeśli ustawiona, natychmiast kończy działanie, więc żaden kod nie jest faktycznie wykonywany. Mógłbym "prelinkować" w ten sposób, ale myślę, że to nieprzyjemne rozwiązanie, którego chcę uniknąć.
Każdy pomysł?
Naprawdę nie rozumiem, dlaczego tworzenie delegata siły JIT. Druga metoda ma być używana z CER (ograniczonymi regionami wykonawczymi), nie jest też pewna, czy to właściwa droga. – svick