|
阅读:1313回复:0
MapControl控件的问题
<p>我用VC2005+ArcEngine 9.3进行开发。</p>
<p>首先地图控件上有不少图层(二十个左右)。</p> <p>现在需要从SQL数据库中获取监测点数据,并将监测点数据在地图上实时显示出来。此外还有其他一些类似的数据也要从SQL数据库中获取并在地图上实时显示。</p> <p> </p> <p>我是在定时器响应中读取数据库中的数据并把相关数据在地图上进行显示。</p> <p>但是程序有个问题,由于MapControl上要显示的数据量很大,导致MapControl显示效率很低。经常卡的都动不了。有时候甚至导致程序崩溃。</p> <p>调试程序:设置断点并利用Spy++观察。</p> <p>观察到堆栈信息如下:</p> <p> </p> <p>FeatureLayer.dll!7147f8d4() </p> <p> [下面的框架可能不正确和/或缺失,没有为 FeatureLayer.dll 加载符号] </p> <p> FeatureLayer.dll!7147c479() </p> <p> Map.dll!028aa931() </p> <p> Map.dll!028afa73() </p> <p> Geometry.dll!03962c56() </p> <p> Map.dll!028affbd() </p> <p> MapControl.ocx!01a2ad06() </p> <p> MapControl.ocx!01a2f5b1() </p> <p> MapControl.ocx!01a277a8() </p> <p> MapControl.ocx!01a4250c() </p> <p> MapControl.ocx!01a423e6() </p> <p> MapControl.ocx!01a41fdd() </p> <p> MapControl.ocx!01a3d7d6() </p> <p> user32.dll!76e4c4e7() </p> <p> user32.dll!76e4c5e7() </p> <p> user32.dll!76e4c590() </p> <p> user32.dll!76e41b31() </p> <p> user32.dll!76e41b57() </p> <p> AfCore.dll!6835b66a() </p> <p> Display.dll!6bd2fefe() </p> <p> AfCore.dll!6835c4ce() </p> <p> user32.dll!76e4c4e7() </p> <p> user32.dll!76e4c5e7() </p> <p> user32.dll!76e4c590() </p> <p> user32.dll!76e41b31() </p> <p> user32.dll!76e41b57() </p> <p>> mfc80ud.dll!CWnd::DefWindowProcW(unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) 行1029 + 0x20 字节 C++</p> <p> mfc80ud.dll!CWnd::WindowProc(unsigned int message=15, unsigned int wParam=0, long lParam=0) 行1742 + 0x1c 字节 C++</p> <p> mfc80ud.dll!AfxCallWndProc(CWnd * pWnd=0x00379af8, HWND__ * hWnd=0x0006091a, unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) 行240 + 0x1c 字节 C++</p> <p> mfc80ud.dll!AfxWndProc(HWND__ * hWnd=0x0006091a, unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) 行389 C++</p> <p> mfc80ud.dll!AfxWndProcBase(HWND__ * hWnd=0x0006091a, unsigned int nMsg=15, unsigned int wParam=0, long lParam=0) 行411 + 0x15 字节 C++</p> <p> user32.dll!76e4c4e7() </p> <p> user32.dll!76e45f9f() </p> <p> user32.dll!76e4c590() </p> <p> user32.dll!76e44f0e() </p> <p> user32.dll!76e44f7d() </p> <p> ntdll.dll!77736fce() </p> <p> user32.dll!76e44ec3() </p> <p> user32.dll!76e45d0c() </p> <p> user32.dll!76e45d33() </p> <p> user32.dll!76e4cc70() </p> <p> mfc80ud.dll!AfxInternalPumpMessage() 行183 C++</p> <p> mfc80ud.dll!CWinThread::PumpMessage() 行896 C++</p> <p> mfc80ud.dll!CWinThread::Run() 行625 + 0xd 字节 C++</p> <p> mfc80ud.dll!CWinApp::Run() 行894 C++</p> <p> mfc80ud.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x00213908, int nCmdShow=1) 行47 + 0xd 字节 C++</p> <p> Map.exe!wWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x00213908, int nCmdShow=1) 行33 C++</p> <p> Map.exe!__tmainCRTStartup() 行589 + 0x35 字节 C</p> <p> Map.exe!wWinMainCRTStartup() 行414 C</p> <p> KERNEL32.DLL!772ced6c() </p> <p> ntdll.dll!7775377b() </p> <p> ntdll.dll!7775374e() </p> <p> Map.exe!CMapFunction::LabelFeaturesByAnnotateLayer</p> <p> </p> <p>利用Spy++捕捉到程序崩溃时的窗口句柄变量指向的是:MapControl</p> <p> </p> <p> </p> |
|