Beim Durchschauen System.Linq.Enumerable
in DotPeek stelle ich fest, dass einige Methoden mit einem [__DynamicallyInvokable]
Attribut versehen sind.
Welche Rolle spielt dieses Attribut? Wird es von DotPeek hinzugefügt oder spielt es eine andere Rolle und informiert den Compiler möglicherweise darüber, wie die Methoden am besten optimiert werden können?
c#
dynamic-invoke
Jamie Dixon
quelle
quelle
IReadOnlyCollection<T>
.System.ServiceModel v3
'sBasicHttpBinding.TextEncoding
(das in V4 zu einer neuen Basisklasse aufgestiegen ist und wirdHttpBindingBase.TextEncoding
)Antworten:
Es ist nicht dokumentiert, sieht aber wie eine der Optimierungen in .NET 4.5 aus. Es scheint verwendet zu werden, um den Reflection-Typ-Info-Cache zu aktivieren, sodass nachfolgender Reflection-Code für gängige Framework-Typen schneller ausgeführt wird. Es gibt einen Kommentar dazu in der Referenzquelle für System.Reflection.Assembly.cs, RuntimeAssembly.Flags-Eigenschaft:
Ohne weitere Hinweise, was eine "gesegnete API" bedeuten könnte. Obwohl aus dem Kontext klar hervorgeht, dass dies nur für Typen im Framework selbst funktioniert. Es sollte irgendwo zusätzlichen Code geben, der das Attribut überprüft, das auf Typen und Methoden angewendet wird. Keine Ahnung, wo sich das befindet, aber da es eine Ansicht aller .NET-Typen geben müsste, um das Caching zu testen, kann ich nur an Ngen.exe denken.
quelle
System.ServiceModel 3.0
) verschoben hat . Ich war davon ausgegangen, dass die Vereinheitlichung a lamscorlib
Referenzen im Spiel ist, habe aber ohnehin noch einiges zu tun - werde mich zu gegebener Zeit bei meinen Kommentaren melden und / oder irreführenden Ton entfernen ...System.ServiceModel v3
, diese unter CLR4-Auto-Upgrades auf geladen wirdSystem.ServiceModel v4
. Das lustige daran ist, dass .NET 4.5 ein In-Place-Update für dasSystem.ServiceModel
Ablegen einer neuen Basisklasse darunter durchführt und die Eigenschaft um eine Ebene nach unten verschiebt .Ich fand, dass es in der
Runtime*Info.IsNonW8PFrameworkAPI()
Reihe der internen Methoden verwendet wird. Wenn dieses Attribut einem Mitglied zugewiesen wird, kehrt IsNonW8PFrameworkAPI () zurückfalse
und stellt das Mitglied in WinRT-Anwendungen zur Verfügung und schließt dieThe API '...' cannot be used on the current platform.
Ausnahme.Profiler-Autoren sollten dieses Attribut auf Mitglieder setzen, die von ihrem Profiler in Framework-Assemblys ausgegeben wurden, wenn sie unter WinRT darauf zugreifen möchten.
quelle
RuntimeAssembly.InvocableAttributeCtorToken
, die von den vonIsNonW8PFrameworkAPI()
Ihnen erwähnten Methoden aufgerufen werden .