См. this для получения дополнительной информации от самих Microsoft.
Кроме этого;кажется, что P / Invoke является самым быстрым (например, см. this ).Исходя из опыта, я могу сказать, что P / Invoke работает довольно быстро (75 мкс на вызов по сравнению с 1,4 мкс только для C #), но это, конечно, не универсально и YMMV.
Более того, в то время как P / Invoke довольно быстр, он совершенно небезопасен и часто просто боль в ***.То же самое касается COM Interop, так как оба испытывают недостаток всего синтаксического сахара и простоты, которые предлагает C # - и в некоторой степени C ++ / CLI -.Они также приводят к гораздо большему количеству подробного кода.
Здесь C ++ CLI пригодится.Это делает написание кода взаимодействия намного проще и безопаснее, чем с помощью P / Invoke или COM.Он также менее многословен.
Однако гораздо важнее то, что P / Invoke не работает с C ++ .Он работает только с C, так что вам всегда будет нужен хотя бы тонкий слой-обертка для вашего кода C ++ (например, extern "C"
, без классов и т. Д.), В то время как C ++ / CLI работает с C ++ и всеми приятными вещами, такими как std::string
..
Вывод: важно не выбирать, что является самым быстрым с точки зрения времени выполнения, а скорее с точки зрения времени разработки : вы хотите потратить 8+ часов на охотуСнизить неприятную утечку памяти, вызванную не тщательно написанным P / Invoke, просто для того, чтобы получить дополнительные +10us?
Выберите, что является наиболее читабельным и наиболее безопасным, а не то, что немного быстрее, чем другие.Оптимизацию можно и нужно делать скорее в конце.