.NET Native и RCW накладные расходы
Мне интересно, как работает.NET Native. Обычно при использовании классов WinRT в управляемом коде они вызываются через RCW, что влечет за собой некоторые накладные расходы из-за взаимодействия между управляемым и неуправляемым кодом. Интересно, есть ли теоретически такие же издержки, когда управляемый код компилируется с использованием.NET Native?
1 ответ
Собственное взаимодействие.NET с WinRT имеет ту же структуру, что и работа с CoreCLR или полной структурой. Это потому, что у вас есть неизбежные накладные расходы на то, чтобы гарантировать, что память для различных объектов отслеживается должным образом, поскольку они передаются через границу. Всегда найдется неснижаемый набор вещей, которые необходимо отслеживать из-за GC в зависимости от того, на какую среду выполнения.NET вы нацеливаетесь.
Тем не менее, код взаимодействия, сгенерированный для приложения, основанного на.NET, будет иметь преимущество в том, что будет сгенерирован заранее. Это означает, что он может быть оптимизирован тем же оптимизатором программ, который является частью нашего компилятора C++, поэтому вы получите лучший ассемблерный код, который может предложить Microsoft.
(Раскрытие информации: я работаю в.NET Native Runtime и в группе компиляторов)