2014-10-14 4 views
0

응용 프로그램이 끝난 후 여러 SharpDx 비트 맵을 삭제할 때 이상한 충돌이 발생합니다. 예외는 발견 할 수없는 것으로 보이며 IIS를 파괴하기까지 계속됩니다. 그것은 모든 시간을 발생하지 않고 생산하는 충돌 보고서를 DebugDiag를 사용하여 Windows 7SharpDX.Direct2D1.Bitmap이 윈도우 8에서 충돌을 처리합니다.

에 전혀 발생하지 않습니다

Type of Analysis Performed Crash Analysis 
Machine Name My-Machine-Name 
Operating System Unexpected 
Number Of Processors 2 
Process ID 9556 
Process Image c:\Windows\System32\inetsrv\w3wp.exe 
System Up-Time 3 day(s) 02:43:33 
Process Up-Time 00:00:54 

In w3wp__App Pool__PID__9556__Date__10_13_2014__Time_10_02_32AM__26__Second_Chance_Exception_C0000409.dmp the assembly instruction at MSVCR120_CLR0400!abort+34 in C:\Windows\System32\MSVCR120_CLR0400.dll from Microsoft Corporation has caused an unknown exception (0xc0000409) on thread 21 

Thread 21 - System ID 6816 
Entry point clr!Thread::intermediateThreadProc 
Create time 10/13/2014 10:01:53 AM 
Time spent in user mode 0 Days 0:0:14.937 
Time spent in kernel mode 0 Days 0:0:0.250 

.NET Call Stack 

Function 
System.Runtime.InteropServices.Marshal.Release(IntPtr) 
System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef) 
System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef) 

Full Call Stack 

Function 
MSVCR120_CLR0400!abort+34 
MSVCR120_CLR0400!purecall+29 
WindowsCodecs!CExternalStream::HrClose+44 
WindowsCodecs!CExternalStream::~CExternalStream+23 
WindowsCodecs!CExternalStream::`vector deleting destructor'+14 
WindowsCodecs!CMILCOMBase::InternalRelease+29 
d2d1!BitmapRealization::~BitmapRealization+2c0 
d2d1!RefCountedObject<BitmapRealization,LockingRequired,DeleteOnZeroReference>::`vector deleting destructor'+29 
d2d1!RefCountedObject<BitmapRealization,LockingRequired,DeleteOnZeroReference>::Release+31 
d2d1!D2DBitmap::~D2DBitmap+d7 
d2d1!ComObject<D2DBitmap,type_list<ID2D1Bitmap,type_list<ID2DImageStreamSource,type_list<DXCapture::IDxObservedObject,type_list<ID2D1Bitmap1,type_list<ID2D1Image,type_list<DXCapture::IDxObservedObject,type_list<ID2D1Resource,type_list<DXCapture::IDxObservedObject,null_type> > > > > > > >,LockingRequired,RefCountedObject<D2DBitmap,LockingRequired,LockFactoryOnReferenceReachedZero> >::`vector deleting destructor'+14 
d2d1!LockFactoryOnReferenceReachedZero::ReferenceReachedZero<RefCountedObject<D2DBitmap,LockingRequired,LockFactoryOnReferenceReachedZero> >+48 
d2d1!RefCountedObject<D2DBitmap,LockingRequired,LockFactoryOnReferenceReachedZero>::Release+22 
clr!SafeRelease+af 
clr!MarshalNative::Release+9a 
0x00007ff8`19e35616 
0x00007ff8`19e35592 
0x00007ff8`19e354b6 
0x00007ff8`1a08f40b 
0x00007ff8`1a08ea68 
0x00007ff8`1a002150 
0x00007ff8`1a001d62 
0x00007ff8`19ffd941 
0x00007ff8`19ffc990 
0x00007ff8`19ffc321 
0x00007ff8`19923841 
0x00007ff8`199236e7 
0x00007ff8`1991e9e6 
System_Web_ni+2f6221 
System_Web_ni+2bd495 
System_Web_ni+2dab5a 
System_Web_ni+2bd6a3 
System_Web_ni+2b75de 
System_Web_ni+2c0561 
System_Web_ni+2bff92 
System_Web_ni+a15a41 
clr!UMThunkStub+6e 
webengine4!W3_MGD_HANDLER::ProcessNotification+78 
webengine4!W3_MGD_HANDLER::DoWork+34f 
webengine4!RequestDoWork+34e 
webengine4!CMgdEngHttpModule::OnExecuteRequestHandler+21 
iiscore!NOTIFICATION_CONTEXT::RequestDoWork+224 
iiscore!NOTIFICATION_CONTEXT::CallModulesInternal+198 
iiscore!NOTIFICATION_CONTEXT::CallModules+36 
iiscore!NOTIFICATION_MAIN::DoWork+4b4 
iiscore!W3_CONTEXT_BASE::IndicateCompletion+97 
webengine4!MgdIndicateCompletion+60 
System_Web_ni+36956b 
System_Web_ni+2c074f 
System_Web_ni+2bff92 
System_Web_ni+a15a41 
clr!UM2MThunk_WrapperHelper+43 
clr!UM2MThunk_Wrapper+5a 
clr!Thread::DoADCallBack+13c 
clr!UM2MDoADCallBack+91 
clr!UMThunkStub+26d 
webengine4!W3_MGD_HANDLER::ProcessNotification+78 
webengine4!ProcessNotificationCallback+42 
clr!UnManagedPerAppDomainTPCount::DispatchWorkItem+134 
clr!ThreadpoolMgr::ExecuteWorkRequest+64 
clr!ThreadpoolMgr::WorkerThreadStart+2b6 
clr!Thread::intermediateThreadProc+7d 
kernel32!BaseThreadInitThunk+d 
ntdll!RtlUserThreadStart+1d 

은 사람이 충돌의 감각을 만들 수 있습니까? 또는이 문제를 해결할 수있는 방법에 대한 조언이있는 사람이 있습니까?

+0

몇 가지 추가 정보를 발견했습니다. Visual Studio에서 실행할 때이 스택이 나타나는 동일한 위치에서 액세스 위반 예외가 발생하는 것을 볼 수 있습니다. 또한 나는 일종의 해결 방법을 발견했다. 응용 프로그램 풀에서 32 비트 응용 프로그램 사용을 true로 설정하면 더 이상 충돌이 발생하지 않습니다. 아무도 왜 이것을 설명 할 수 있습니까? –

+0

우리는 Server 2012 x64에서도 비슷한 문제가 있습니다. Win 7 및 XP (모든 CPU)에서 올바르게 작동합니다. 스택 추적에서 CExternalStream을 보았을 때 Image.FromStream (스트림)을 사용할 수 있고 스트림이 이미지가 삭제되기 전에 폐기 될 수 있다고 추측했습니다. (문서는 스트림이 항상 열리고 있어야하며 삭제되지 않아야한다고 말합니다.) 이미지가 폐기 될 때까지). – osexpert

+0

우리는 큰 응용 프로그램을 가지고 있으며 이미지가 삭제되기 전에 스트림을 처리하는 곳을 많이 볼 수 있습니다.하지만 나쁘다고 생각합니다 ... 그러나 XP와 Win 7이 작동하는 이유는 설명하지 않습니다. 고객은 Windows 7 호환 모드를 사용하는 경우이 충돌이 발생하지 않는다고 주장하고 있습니다. – osexpert

답변

0

마지막으로 @ osexpert의 제안을 시도 할 기회를 얻었습니다.

스트림을 사용하는 다양한 클래스 (WIC.BitmapDecoder, WIC.BitmapFrameDecoder, WIC.FormatConverter)를 저장하기 위해 새 클래스를 추가 했으므로 프로그램을 마칠 때 올바른 순서로 삭제할 수 있습니다 비트 맵.

오류 표시가 중지되었습니다. 불행히도 나는 왜 그것이 Win8에서만 발생했는지 아직도 모른다. 오류가 무작위로 발생했기 때문에 가능한 타이밍은 Win7에서 충분히 달라서 오류가 발생하지 않았습니다.

+0

이 질문에 대한 답변이 아닙니다. 의견을 게시하는 것을 고려하십시오. – dcarson

관련 문제