2009-12-24 4 views

답변

6

P/Invoke has an overhead of about 10-30 x86 instructions per call. 얼마나 중요한지는 경계를 넘는 빈도와 상대방에서 소비하는 시간에 따라 다릅니다. 예를 들어, 계산에 10 마이크로 초가 소요될 경우 추가 10-30 명령어는 계산 비용에 비해 중요하지 않습니다. 계산이 쉽지 않고 많이 호출된다면 오버 헤드는 이제 이식을 정당화 할만큼 중요 할 수 있습니다. 또는 경계를 넘는 횟수를 최소화하기 위해 반복 호출을 수행하는 관리되지 않는 래퍼 함수를 ​​만드는 것이 좋습니다.

주요 단점은 성능이 아니라 신뢰 요구 사항입니다. 예 : 네이티브 코드를 호출하면 네트워크 드라이브 나 인트라넷 사이트 (최소한 추가 구성없이)에서 실행할 수 없습니다. 이러한 소스는 기본적으로 로컬 시스템보다 신뢰할 수 없기 때문입니다.

+0

좋은 지적. 나는 신뢰 문제에 대해 생각하고 있지 않았다. – DenaliHardtail

+2

또한 Mono (및 다른 플랫폼)에서 실행되는 희망이 없습니다 (옆에) – Earlz

+0

@Earlz why ?? Mono는 P/Invoke와 잘 작동합니다. 그들은 심지어 어떻게 작동시킬 수 있습니까 (gtk, glib, ...)? 기본 라이브러리가 크로스 플랫폼 인 경우 다른 플랫폼의 Mono와 함께 사용할 수 있습니다 (abc.dll 대신 libabc.so가 사용됩니다). – Yury

1

주목할만한 또 다른 점은 관리되지 않는 코드가 프로세스의 모든 AppDomains간에 공유된다는 것입니다. ASP.NET 작업자 프로세스와 같이 여러 AppDomains가있는 프로세스가있는 경우에 적합합니다.

관련 문제