Sfoglia il codice sorgente

Modify TranslatedFunction.GetPointer () to optimize performance (#995)

* add local var to reduce calling Marshal.GetFunctionPointerForDelegate

* modify code style
Chenj168 6 anni fa
parent
commit
561d64e5bf
1 ha cambiato i file con 7 aggiunte e 1 eliminazioni
  1. 7 1
      ARMeilleure/Translation/TranslatedFunction.cs

+ 7 - 1
ARMeilleure/Translation/TranslatedFunction.cs

@@ -9,6 +9,7 @@ namespace ARMeilleure.Translation
         private const int MinCallsForRejit = 100;
 
         private GuestFunction _func;
+        private IntPtr _funcPtr;
 
         private bool _rejit;
         private int  _callCount;
@@ -33,7 +34,12 @@ namespace ARMeilleure.Translation
 
         public IntPtr GetPointer()
         {
-            return Marshal.GetFunctionPointerForDelegate(_func);
+            if (_funcPtr == IntPtr.Zero)
+            {
+                _funcPtr = Marshal.GetFunctionPointerForDelegate(_func);
+            }
+
+            return _funcPtr;
         }
     }
 }