C# 응용 프로그램의 네이티브 라이브러리에서 함수를 호출 할 때의 단점은 무엇입니까? 퍼포먼스 히트에 대해 무엇을 기대할 수 있습니까? 이 함수는 기본 엔지니어링 계산이며 너무 복잡하지 않습니다. 언젠가 C#으로 다시 작성할 수 있습니다.관리되는 C# 응용 프로그램에서 관리되지 않는 코드를 호출 할 때의 단점
1
A
답변
6
P/Invoke has an overhead of about 10-30 x86 instructions per call. 얼마나 중요한지는 경계를 넘는 빈도와 상대방에서 소비하는 시간에 따라 다릅니다. 예를 들어, 계산에 10 마이크로 초가 소요될 경우 추가 10-30 명령어는 계산 비용에 비해 중요하지 않습니다. 계산이 쉽지 않고 많이 호출된다면 오버 헤드는 이제 이식을 정당화 할만큼 중요 할 수 있습니다. 또는 경계를 넘는 횟수를 최소화하기 위해 반복 호출을 수행하는 관리되지 않는 래퍼 함수를 만드는 것이 좋습니다.
주요 단점은 성능이 아니라 신뢰 요구 사항입니다. 예 : 네이티브 코드를 호출하면 네트워크 드라이브 나 인트라넷 사이트 (최소한 추가 구성없이)에서 실행할 수 없습니다. 이러한 소스는 기본적으로 로컬 시스템보다 신뢰할 수 없기 때문입니다.
1
주목할만한 또 다른 점은 관리되지 않는 코드가 프로세스의 모든 AppDomains간에 공유된다는 것입니다. ASP.NET 작업자 프로세스와 같이 여러 AppDomains가있는 프로세스가있는 경우에 적합합니다.
관련 문제
- 1. 관리되지 않는 C++에서 관리되는 DLL을 호출 할 수 있습니까?
- 2. 내 응용 프로그램이 관리되지 않습니다. 어디서 관리되는 코드를 소개합니까?
- 3. 관리되지 않는 C++에서 호출 된 관리되는 .NET 코드 디버깅
- 4. 관리되는 환경에서 관리되지 않는 스레드를 사용할 때의 단점은 무엇입니까?
- 5. 관리되지 않는 HWND의 자식으로 관리되는 양식
- 6. 관리되는 + 관리되지 않는 응용 프로그램으로 인해 메모리 누수가 발생합니다.
- 7. 관리되지 않는 C++ : 코드를 동적으로로드하는 방법?
- 8. 관리되는 C++의 관리되지 않는 C++ 템플릿이 잘못된 이미지를 던집니까?
- 9. 관리되지 않는 메모리 및 관리되는 메모리
- 10. 관리되지 않는 C++ COM 및 관리되는 C++ .NET4 interop
- 11. 혼합 응용 프로그램에서 예외 처리를 수행하는 방법? (관리되지 않는 DLL을 사용하는 관리되는 응용 프로그램)
- 12. 관리되지 않는 GUID를 관리되는 Guid로 변환^
- 13. 관리되는 실행 파일의 관리되지 않는 lib가 관리되는 예외를 발생 시킴
- 14. 관리되는 코드에서 관리되지 않는 개체를 매개 변수로 사용하여 관리되지 않는 메서드를 효율적으로 호출
- 15. C# 관리 dll 호출 또는 관리되지 않는 dll 호출?
- 16. 관리되는 C#에서 관리되지 않는 무료 C 코드 메모리
- 17. 관리되는 클래스의 관리되지 않는 구조 인스턴스
- 18. HOWTO : 관리되는 C# 인터페이스를 관리되지 않는 C++에서 WindowsCE Compact Framework에서 호출
- 19. 관리되지 않는 메모리를 관리되는 바이트 배열로 복사
- 20. 형식의 배열에 대한 마샬링 (관리되는 C# -> 관리되지 않는 C++)
- 21. 관리되는 C++에서 관리되지 않는 C++ 예외를 catch하는 방법
- 22. 관리되는 C++ exe에서 관리되지 않는 C++ exe를 호출하는 방법
- 23. 웹 응용 프로그램에서 응용 프로그램 변수를 사용할 때의 장점과 단점
- 24. 관리되지 않는 C++ 응용 프로그램이 관리되는 유형이 필요할 때만 CLR을로드 할 수 있습니까?
- 25. (관리되지 않는) C++에서 XLL 호출
- 26. 웹 응용 프로그램에서 응용 프로그램을 호출 할 때의 문제
- 27. 관리되는 코드에서 관리되지 않는 배열 채우기
- 28. 관리되는 코드와 관리되지 않는 코드는 무엇을 의미합니까?
- 29. 관리되는 코드가 관리되지 않음
- 30. VB에서 관리되지 않는 DLL 호출
좋은 지적. 나는 신뢰 문제에 대해 생각하고 있지 않았다. – DenaliHardtail
또한 Mono (및 다른 플랫폼)에서 실행되는 희망이 없습니다 (옆에) – Earlz
@Earlz why ?? Mono는 P/Invoke와 잘 작동합니다. 그들은 심지어 어떻게 작동시킬 수 있습니까 (gtk, glib, ...)? 기본 라이브러리가 크로스 플랫폼 인 경우 다른 플랫폼의 Mono와 함께 사용할 수 있습니다 (abc.dll 대신 libabc.so가 사용됩니다). – Yury