Select to view content in your preferred language

Internet Explorer hangs / CPU = 100% when zooming & panning with mouse

439
1
07-19-2011 01:47 PM
AndySanford
Emerging Contributor
We're using the 2.1 Silverlight API with SL4 in production.  Our customer is reporting IE7 hanging when they zoom.  On our test systems we can reproduce IE (we're using IE9) hanging with CPU going to 100% when we zoom and pan at the same time interactively with the mouse.  It seems easier to repro using aerial imagery than with streets maps (both from arcgis online), but you can see the problem with both.  In testing, we've reproduced this problem in both your 2.1 and 2.2 releases.  It seems that sometimes, after about 1 minute or so, IE starts working again, but often it stays hung.  If you look in task manager, you can see the working set constantly increasing with the CPU pegged.  I also reproduced this with your interactive demo (which seems to be currently using 2.2):
http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#SwitchMap
-using imagery works best - just zoom by spinning the mouse wheel, then quickly try to pan at the same time.  After several tries, you should see the problem.  After reproducing, I attached the debugger and got the call stack.  I did this a few times:

1) try1
> System.Windows.dll!MS.Internal.XcpImports.GetValue(MS.Internal.IManagedPeerBase managedPeer = {System.Windows.Controls.UIElementCollection}, System.Windows.DependencyProperty property = {System.Windows.CoreDependencyProperty}) + 0x50 bytes
  System.Windows.dll!System.Windows.DependencyObject.GetValueInternal(System.Windows.DependencyProperty dp) + 0x39 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.Windows.UIElement>.CountImpl.get() + 0x32 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.__Canon>.CollectionEnum<System.__Canon>.MoveNext() + 0x24 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.getProgress() + 0x138 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.bmi_DownloadProgress(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e, ESRI.ArcGIS.Client.TiledLayer.ImageTileInfo data, System.EventHandler<System.Windows.Media.Imaging.DownloadProgressEventArgs> onProgressEventHandler) + 0xf5 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.LoadImage.AnonymousMethod__f(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e) + 0x1c bytes
  System.Windows.dll!MS.Internal.CoreInvokeHandler.InvokeEventHandler(int typeIndex, System.Delegate handlerDelegate, object sender, object args) + 0x937 bytes
  System.Windows.dll!MS.Internal.JoltHelper.FireEvent(System.IntPtr unmanagedObj, System.IntPtr unmanagedObjArgs, int argsTypeIndex, int actualArgsTypeIndex, string eventName) + 0x338 bytes

2) try2
> System.Windows.dll!MS.Internal.XcpImports.GetValue(MS.Internal.IManagedPeerBase managedPeer = {System.Windows.Controls.Image}, System.Windows.DependencyProperty property = {System.Windows.CoreDependencyProperty}) + 0x50 bytes
  System.Windows.dll!System.Windows.DependencyObject.GetValueInternal(System.Windows.DependencyProperty dp) + 0x39 bytes
  System.Windows.dll!System.Windows.FrameworkElement.GetValueInternal(System.Windows.DependencyProperty dp) + 0x44 bytes
  System.Windows.dll!System.Windows.Controls.Image.Source.get() + 0xc0 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.getProgress() + 0xa5 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.showImage(System.Windows.Controls.Image img, bool enableFading) + 0x234 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.bmi_DownloadProgress(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e, ESRI.ArcGIS.Client.TiledLayer.ImageTileInfo data = {ESRI.ArcGIS.Client.TiledLayer.ImageTileInfo}, System.EventHandler<System.Windows.Media.Imaging.DownloadProgressEventArgs> onProgressEventHandler) + 0xd5 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.LoadImage.AnonymousMethod__f(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e) + 0x1c bytes
  System.Windows.dll!MS.Internal.CoreInvokeHandler.InvokeEventHandler(int typeIndex, System.Delegate handlerDelegate, object sender, object args) + 0x937 bytes
  System.Windows.dll!MS.Internal.JoltHelper.FireEvent(System.IntPtr unmanagedObj, System.IntPtr unmanagedObjArgs, int argsTypeIndex, int actualArgsTypeIndex, string eventName) + 0x338 bytes
3) try 3 - streets
> System.Windows.dll!MS.Internal.XcpImports.ConvertType(MS.Internal.CValue outVal, int typeIndex, bool releaseObjectReference, bool deleteBuffer, MS.Internal.IManagedPeerBase fromObject) + 0x4f9 bytes
  System.Windows.dll!MS.Internal.XcpImports.ConvertCValueForManagedWithType(System.Type propertyType, ref MS.Internal.CValue outVal = {MS.Internal.CValue}, int outDOType = 0x00000000, bool releaseObjectReference = true, bool deleteBuffer = true, MS.Internal.IManagedPeerBase fromObject = {System.Windows.Controls.UIElementCollection}) + 0x1eb bytes
  System.Windows.dll!MS.Internal.XcpImports.GetValue(MS.Internal.IManagedPeerBase managedPeer, System.Windows.DependencyProperty property) + 0x72 bytes
  System.Windows.dll!System.Windows.DependencyObject.GetValueInternal(System.Windows.DependencyProperty dp) + 0x39 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.Windows.UIElement>.CountImpl.get() + 0x32 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.Windows.UIElement>.GetItemDependencyObject(int index = 0x00000c44) + 0x1b bytes
  System.Windows.dll!System.Windows.Controls.UIElementCollection.GetItemImplSkipMethodPack(int index) + 0x6 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.Windows.UIElement>.CollectionEnum<System.Windows.UIElement>.Current.get() + 0x42 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.getProgress() + 0x7d bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.bmi_DownloadProgress(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e, ESRI.ArcGIS.Client.TiledLayer.ImageTileInfo data, System.EventHandler<System.Windows.Media.Imaging.DownloadProgressEventArgs> onProgressEventHandler) + 0xf5 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.LoadImage.AnonymousMethod__f(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e) + 0x1c bytes
  System.Windows.dll!MS.Internal.CoreInvokeHandler.InvokeEventHandler(int typeIndex, System.Delegate handlerDelegate, object sender, object args) + 0x937 bytes
  System.Windows.dll!MS.Internal.JoltHelper.FireEvent(System.IntPtr unmanagedObj, System.IntPtr unmanagedObjArgs, int argsTypeIndex, int actualArgsTypeIndex, string eventName) + 0x338 bytes

3.1) break into dbg again during same hang: (eventually #3 came back)
> System.Windows.dll!MS.Internal.XcpImports.ConvertCValueForManagedWithType(System.Type propertyType, ref MS.Internal.CValue outVal = {MS.Internal.CValue}, int outDOType = 0x00000000, bool releaseObjectReference = true, bool deleteBuffer = true, MS.Internal.IManagedPeerBase fromObject = {System.Windows.Controls.UIElementCollection}) + 0x1bb bytes
  System.Windows.dll!MS.Internal.XcpImports.GetValue(MS.Internal.IManagedPeerBase managedPeer, System.Windows.DependencyProperty property) + 0x72 bytes
  System.Windows.dll!System.Windows.DependencyObject.GetValueInternal(System.Windows.DependencyProperty dp) + 0x39 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.Windows.UIElement>.CountImpl.get() + 0x32 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.Windows.UIElement>.GetItemDependencyObject(int index = 0x00000e43) + 0x1b bytes
  System.Windows.dll!System.Windows.Controls.UIElementCollection.GetItemImplSkipMethodPack(int index) + 0x6 bytes
  System.Windows.dll!System.Windows.PresentationFrameworkCollection<System.Windows.UIElement>.CollectionEnum<System.Windows.UIElement>.Current.get() + 0x42 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.getProgress() + 0x7d bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.showImage(System.Windows.Controls.Image img, bool enableFading) + 0x234 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.bmi_DownloadProgress(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e, ESRI.ArcGIS.Client.TiledLayer.ImageTileInfo data = {ESRI.ArcGIS.Client.TiledLayer.ImageTileInfo}, System.EventHandler<System.Windows.Media.Imaging.DownloadProgressEventArgs> onProgressEventHandler) + 0xd5 bytes
  ESRI.ArcGIS.Client!ESRI.ArcGIS.Client.TiledLayer.LoadImage.AnonymousMethod__f(object sender, System.Windows.Media.Imaging.DownloadProgressEventArgs e) + 0x1c bytes
  System.Windows.dll!MS.Internal.CoreInvokeHandler.InvokeEventHandler(int typeIndex, System.Delegate handlerDelegate, object sender, object args) + 0x937 bytes
  System.Windows.dll!MS.Internal.JoltHelper.FireEvent(System.IntPtr unmanagedObj, System.IntPtr unmanagedObjArgs, int argsTypeIndex, int actualArgsTypeIndex, string eventName) + 0x338 bytes


I was hoping that the 2.2 fix "Map.ZoomTo() followed by Map.PanTo() leads to incorrect tile level calculation that causes application to hang" would fix this problem, but it doesn't seem to.

How can we fix this problem? 

Thank you!
0 Kudos
1 Reply
HasheenDeBerry
Occasional Contributor
I am experiencing the same problem.  With my application browser response stops when panning the map while a zoom operation is in progress on point features.  browser response slows, but recovers when panning the map when a zoom operation is in progress for polygon features.  In all cases, the browser eventually recovers and browser response is restored.  IE is toast when this happens.  Chrome seems to recover the fastest.

One of my QA colleagues ran across this issue and i was able to recreate it in the 2.4 SDK too.  Any possibility of this being remedied despite the likelihood of something like this happening on a regular basis?
0 Kudos