在做下面的研究前,我是一个WPF白痴。只会花一个简单的button。我的目的很简单,弄清楚WPF如何工作的。
我要解决的第一个问题是WPF如何Render的。据说是用DX,但是一定要亲自证实下才可以相信。怎么做呢,先找一个UI复杂的程序,这里选择了MSDN的sample:
http://msdn2.microsoft.com/en-us/library/ms771766.aspx
运行起来后,选择一个复杂的背景,我选择了用Video当背景。然后用Windbg断下来,接下来用~命令检查哪些线程比较繁忙,看到繁忙的线程是:
0:006> kL
ChildEBP RetAddr
0363fdf8 77c40d8f ntdll!KiFastSystemCallRet
0363fe18 4e040b1c GDI32!NtGdiDdDestroySurface+0xc
0363fe30 4e055ed7 d3d9!DdDestroySurface+0x1c
0363fe54 4e05624d d3d9!CMipMap::~CMipMap+0x67
0363fe60 4e04c442 d3d9!CMipMap::`scalar deleting destructor'+0xd
0363fe70 4e060b7d d3d9!CBaseObject::ReleaseImpl+0x42
0363fe80 531bf894 d3d9!CCubeSurface::Release+0x3d
0363fe8c 531b5aa9 MilCore!CD3DTextureSurface::ReleaseD3DResources+0x12
0363fe98 531b