VSTO 4.0 Excel 2007加载项导致Windows 7上的内存泄漏

时间:2010-09-23 22:14:47

标签: vsto excel-2007

我们有一个用于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出现这些问题的任何帮助或指示都将不胜感激。

谢谢,

埃里克

1 个答案:

答案 0 :(得分:0)

实际上,我发现该应用程序正在为TreeNodes上的上下文菜单创建数千个ToolStripMenuItems。一旦我分享了这些内容,就会解决内存问题。