在非常大的解决方案中切换到设计模式时VS2008崩溃

时间:2011-01-03 15:51:44

标签: .net visual-studio-2008-sp1

这种情况发生在他们刚刚收到的几台开发者机器上。我们有一个非常大的解决方案,70多个项目。如果在设计模式下打开任何表单,甚至是新的空白表单,VS大部分时间都会崩溃。使用一些相同的项目创建较小的解决方案不会导致问题。并非所有开发人员都拥有它。我们有vs2008 SP1,Windows XP和它的VB.net Winforms。我搜索了谷歌,但所有的VS崩溃似乎都涉及插件或WPF。它们不是新机器,而是由IT部门重新成像,我想它们都是从同一图像中复制的。

例外:

System.AccessViolationException was unhandled
  Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
  Source="System.Drawing"
  StackTrace:
       at System.Drawing.SafeNativeMethods.Gdip.GdipFillRectangleI(HandleRef graphics, HandleRef brush, Int32 x, Int32 y, Int32 width, Int32 height)

       at System.Drawing.Graphics.FillRectangle(Brush brush, Int32 x, Int32 y, Int32 width, Int32 height)

       at System.Drawing.Graphics.FillRectangle(Brush brush, Rectangle rect)

       at ystem.Windows.Forms.Design.Behavior.SelectionBorderGlyph.Paint(PaintEventArgs pe)

       at     
System.Windows.Forms.Design.Behavior.BehaviorService.PropagatePaint(PaintEventArgs pe)

       at System.Windows.Forms.Design.Behavior.BehaviorService.AdornerWindow.WndProc(Message& m)


       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, 
IntPtr wparam, IntPtr lparam)

仅供参考:如果您想知道如何从visual studio获取异常。我打开了2份VS.我在Tools \ Attach Process下将第一个附加到第二个。然后在第二个打开解决方案并将其崩溃。

2 个答案:

答案 0 :(得分:2)

这看起来像是GDI +中的一个错误。我猜它不能很好地处理资源耗尽。 Windows为进程提供了诸如句柄,窗口和笔和笔刷等GDI资源之类的配额。当它超过10000时,它会拒绝给出,假设程序中的泄漏是问题。

您可以使用Taskmgr.exe,Processes选项卡查看此内容。查看+选择列,勾选句柄,USER对象和GDI对象。一旦其中一个接近配额,各种苦难就会开始发生。通常画怪语btw。但是当它没有检查API调用返回NULL时,代码肯定会崩溃。在非托管代码中非常常见。

对于Vista来说,GDI +已经很多改进了,开发人员现在真的不应该再运行XP了。 Win7非常好。也是学习处理UAC和会话0隔离的唯一真正方法。

作为一种可能的解决方法,请在superuser.com上询问如何增加默认流程配额。它在注册表中的某个地方。

答案 1 :(得分:1)

看起来它与视频驱动程序有关,即使这些机器是具有不同视频的不同型号。所有受影响的计算机都在设备管理器中禁用视频驱动程序。安装最新的视频驱动程序已经修复了除一个之外的所有内容如果您将硬件加速滑块几乎滑动到无,则现在可以正常工作。滑块技巧之前没有用,这就是为什么我没有把视频视为问题。我们可能不会使用该机器上的硬件加速。

我们有一些机器出现在一年前,不会显示数据集设计师,我们不得不拒绝硬件加速,以使他们显示。所以我们的几台机器已经以这种方式运行。