2011-09-26 3 views
1

IIS 7에서 실행되는 asp.net에서 관리되지 않는 dll을 사용하고 있습니다. 몇 시간 후에 대부분의 시간이 지나면 응용 프로그램이 약 1 분 동안 중단되거나 오류가 표시됩니다. DLL을 처리, 릴리스 또는 호출해야합니까?관리되지 않는 dll, hangs/waiting/slow

[DllImport("Fan.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] 
public static extern int GET_CALCULATION_FAN_ALONE_PC(ref string input, string buffer); 

도움이 필요하십니까?

+1

'GET_CALCULATION_FAN_ALONE_PC'의 구현은 스레드로부터 안전한가요? – vcsjones

+0

DLL 가져 오기는 정적 일 때 스레드로부터 안전합니다. http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute%28v=vs.71%29.aspx –

답변

1

Unmanged 코드는 스레드로부터 안전하지 않은 것으로 보입니다. 주의해야 할 http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/504cdc70-16f1-4c39-a0c0-1d47b2a64f7b/

건에서

답변 관리되지 않는 코드가 스레드 안전하지 않을 수있다 : 여기서 문제는 데에 좋은 토론입니다. 웹 서비스의 컨텍스트에서 각 요청은 다른 스레드에 도착하고 비 관리 코드가이를 처리하지 못할 수 있습니다. 이러한 충돌은 다중 스레드 환경에서 테스트되지 않은 코드로 인한 메모리 손상의 징후 일 수 있습니다.

있습니다 당신이 관리 코드에서 호출하는 것 같아서 관리되지 않는 코드와 다른 스레딩 문제의 몇 :

1. 같은 둘 이상의 스레드에서 관리되지 않는 코드를 호출하는 것이 안전하지 않을 수도 있습니다 시각. 올바른 잠금으로이 문제를 해결할 수 있습니다. 나는 정확한 강조. 2. 비 관리 코드는 항상 동일한 단일 스레드에서 호출되는 것에 의존 할 수 있습니다. 이것은 가능성은 낮지 만 가능합니다. 응용 프로그램이 시작될 때 어떻게 든 스레드를 시작하고이 코드에 대한 모든 요청을 해당 스레드로 마샬링하지 않는 한 ASP.NET 웹 응용 프로그램 또는 웹 서비스 응용 프로그램에서 직접 해결할 수 없습니다. 3. 관리되지 않는 코드는 COM 코드 일 수 있으며 특정 아파트에서 실행 중인지 여부에 따라 달라질 수 있습니다. 그 해결책이 있는지 나는 모른다.

적어도이 문제를 해결할 수있는 일반적인 해결책은 없습니다. 일반적인 해결책은 관리되지 않는 코드의 개발자 또는 공급 업체가 여러 스레드의 관리되는 코드에서 코드를 안전하게 호출하도록하는 것입니다. 해당 환경에서 코드를 철저히 테스트 할 때까지 실제로 작동하는지 확신 할 수 없습니다.

관련 문제