2017-08-17 127 views
2

我很好奇.NET Native如何工作。通常,當在託管代碼中使用WinRT類時,通過RCW調用它們,由於託管和非託管代碼之間的互操作性,會產生一些開銷。我想知道當使用.NET Native編譯託管代碼時是否存在理論上相同的開銷?.NET Native和RCW開銷

回答

4

使用WinRT的.NET本機互操作與使用CoreCLR或完整框架運行的結構具有相同的結構。這是因爲你有無法避免的開銷,以確保各種對象的內存在跨越邊界時被正確跟蹤。由於您在任何.NET運行時所針對的GC都需要跟蹤,所以總會有不可簡化的事情。

也就是說,爲基於.NET Native應用程序生成的互操作代碼將具有提前生成的好處。這意味着它可以通過屬於C++編譯器的相同程序優化器進行優化,因此您將獲得Microsoft可提供的最佳彙編代碼。

(披露:我在.NET Native運行時和編譯器團隊工作)