2010-05-16 2 views
0

내 WPF 응용 프로그램에서는 실패했지만 관리되지 않는 DLL에서는 p-invoke 호출이 있지만 간단한 WPF 응용 프로그램에서는 실패합니다. 문제가 무엇인지 알아 내려고했지만 결국 전화를하기 전에 너무 많은 메모리를 할당하면 호출이 실패한다는 결론에 도달했습니다. 나는 두 가지 코드 블록을 가지고 있는데, 두 코드는 모두 독자적으로 성공할 것이지만, 두 코드 모두 실행하면 실패 할 수있다. (그들은 p-invoke 호출이하려고하는 것과 아무런 관련이 없다).너무 많은 메모리가 미리 할당 된 경우 P-invoke 호출이 실패합니다.

관리되지 않는 라이브러리에서 어떤 문제가 발생합니까? 관리되는 힙과 관리되지 않는 힙은 자동으로 분리되어 있다고 생각했습니다.

내가 말할 수있는 한 충돌은 동적으로로드 된 보조 DLL에서 p-invoked에서 발생합니다. 그것과 관련이있을 수 있습니까?

답변

0

관리되지 않는 코드가 손상 힙하는 경향이있다. 그 부패의 부작용은 예측할 수 없으며, 나중에 그 부패한 기억으로 어떻게 될지에 달려 있습니다. 부패가 중요한 위치에 있지 않으면 나쁜 일이 발생하지 않는 경우는 드뭅니다. 프로그램의 메모리 할당 패턴을 변경하면 그 결과가 변경 될 수 있습니다.

정말로 알고있는 바로는 관리되지 않는 코드를 신뢰할 수 없다는 것입니다. 그것에 대해 무언가를하는 것은 항상 어렵습니다. 특히 관리되는 호스트 프로그램에서. 관리되지 않는 코드를 사용하여 단위 테스트를 작성하고, 관리되지 않는 코드를 사용하여 실행하고, 관리되지 않는 디버거로 태클 할 수있는 재현 가능한 폭탄을 찾을 때까지는 아무데도 가지 않습니다.

+0

좋습니다. – RandomEngy

0

어두운 곳에서 촬영하면 많은 정보가 작용하지 않습니다.

관리되지 않는 DLL을 특정 기본 주소에로드해야 할 수 있으며 너무 많은 메모리 또는 다른 어셈블리를로드 할 때 DLL을 올바른 주소로로드 할 수 없습니다.

http://msdn.microsoft.com/en-us/library/w368ysh2.aspx

관련 문제