我们有一个用于Excel 2007的VSTO 4.0加载项似乎存在内存泄漏问题,但只有某些文档而且只在Windows 7上出现问题。该行为类似于据称在VSTO 4中修复的LCID代理问题。内存大约在1.2到1.5 GB之间,然后抛出OutOfMemory异常。当我在Windows 7上运行时尝试打开某些文档时,似乎只会发生这种情况。如果我在XP中打开相同的文档,内存肯定会很高但我没有异常。基本上,我得到了各种例外情况,并且从未在同一个地方两次:
-----来源:System.Windows.Forms -----
System.OutOfMemoryException:抛出了类型'System.OutOfMemoryException'的异常。
在System.Windows.Forms.Screen.FromRectangle(Rectangle rect)
在System.Windows.Forms.Screen.GetWorkingArea(Rectangle rect)
at System.Windows.Forms.WindowsFormsUtils.ConstrainToScreenWorkingAreaBounds(Rectangle bounds)
在System.Windows.Forms.ToolStripDropDown.GetDropDownBounds(Rectangle suggestedBounds)
在System.Windows.Forms.ToolStripDropDown.SetBoundsCore(Int32 x,Int32 y,Int32 width,Int32 height,BoundsSpecified指定)
在System.Windows.Forms.Control.SetBounds(Int32 x,Int32 y,Int32 width,Int32 height,BoundsSpecified指定)
在System.Windows.Forms.Control.set_Size(Size value)
在System.Windows.Forms.ToolStripDropDown.AdjustSize()
在System.Windows.Forms.ToolStripDropDown.OnLayout(LayoutEventArgs e)
在System.Windows.Forms.ToolStripDropDownMenu.OnLayout(LayoutEventArgs e)
在System.Windows.Forms.Control.PerformLayout(LayoutEventArgs args)
在System.Windows.Forms.Control.System.Windows.Forms.Layout.IArrangedElement.PerformLayout(IArrangedElement affectedElement,String affectedProperty)
在System.Windows.Forms.Layout.LayoutTransaction.DoLayout(IArrangedElement elementToLayout,IArrangedElement elementCausingLayout,String property)
在System.Windows.Forms.ToolStripItem.InvalidateItemLayout(String affectedProperty,Boolean invalidatePainting)
在System.Windows.Forms.ToolStripItem.InvalidateItemLayout(String affectedProperty)
在System.Windows.Forms.ToolStripItem.OnRightToLeftChanged(EventArgs e)
在System.Windows.Forms.ToolStripDropDownItem.OnRightToLeftChanged(EventArgs e)
在System.Windows.Forms.ToolStripItem.OnOwnerChanged(EventArgs e)
在System.Windows.Forms.ToolStripMenuItem.OnOwnerChanged(EventArgs e)
在System.Windows.Forms.ToolStripItem.SetOwner(ToolStrip newOwner)
在System.Windows.Forms.ToolStripItemCollection.SetOwner(ToolStripItem item)
在System.Windows.Forms.ToolStripItemCollection.Add(ToolStripItem value)
位于C:\ Serenity6.x \ Source \ Hcg \ Stinger \ Report \ ShadowRangeTree \ ShadowRangeNodeEventBehavior.cs:第135行中的Hcg.Stinger.Report.ShadowRangeTree.ShadowRangeNodeEventBehavior.AddDynamicLabelMenu()
这是另一个:
-----来源:System.Windows.Forms -----
System.OutOfMemoryException:抛出了类型'System.OutOfMemoryException'的异常。
在System.Windows.Forms.ToolStripManager.ProcessShortcut(消息& m,键快捷键)
at System.Windows.Forms.ToolStripManager.ProcessCmdKey(Message& m,Keys keyData)
at System.Windows.Forms.ContainerControl.ProcessCmdKey(Message& msg,Keys keyData)
at System.Windows.Forms.Form.ProcessCmdKey(Message& msg,Keys keyData)
at System.Windows.Forms.Control.ProcessCmdKey(Message& msg,Keys keyData)
at System.Windows.Forms.Control.ProcessCmdKey(Message& msg,Keys keyData)
在System.Windows.Forms.TextBoxBase.ProcessCmdKey(Message& msg,Keys keyData)
在System.Windows.Forms.Control.PreProcessMessage(Message& msg)
at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target,Message& msg)
在System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)
当我将文档保存为独立文档并且不使用VSTO加载项打开它时,它能够以最少的内存打开它们。当我使用add in来打开它们时,那就是当事情发生并且崩溃时。
有关Windows 7出现这些问题的任何帮助或指示都将不胜感激。
谢谢,
埃里克
答案 0 :(得分:0)
实际上,我发现该应用程序正在为TreeNodes上的上下文菜单创建数千个ToolStripMenuItems。一旦我分享了这些内容,就会解决内存问题。