VS2008は非常に大きなソリューションで設計モードに切り替えたときにクラッシュします

StackOverflow https://stackoverflow.com/questions/4585909

  •  14-10-2019
  •  | 
  •  

質問

これは、受け取ったばかりのいくつかの開発者マシンで起こっています。非常に大きなソリューション、70以上のプロジェクトがあります。デザインモードで、新しい空白のフォームであってもフォームを開くと、ほとんどの場合にクラッシュします。同じプロジェクトのいくつかを使用して小さなソリューションを作成しても、問題は発生しません。そして、すべての開発者がそれを持っているわけではありません。 VS2008 SP1、Windows XP、およびVB.NET WinFormsがあります。 Googleを検索しましたが、すべてのVSクラッシュにはAddinsまたは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から例外を取得する方法を疑問に思っている場合。 Vsの2コピーを開きました。 Tools Attach Processの下で最初のものを2番目のものに添付しました。その後、2番目のソリューションを開き、クラッシュしました。

役に立ちましたか?

解決 2

マシンは異なるビデオを持つ異なるモデルであるにもかかわらず、ビデオドライバーに関連しているように見えます。影響を受けたすべてのマシンは、デバイスマネージャーで無効になっているビデオドライバーと連携しています。最新のビデオドライバーをインストールすると、そのうちの1つを除くすべてが修正されました。固定されていないものは、ハードウェアアクセラレーションスライダーをほぼゼロにスライドさせると機能しています。スライダーのトリックは動作しませんでした。そのため、私はビデオとは問題とは考えていませんでした。おそらく、そのマシンのハードウェアアクセラレーションを使用して生活するでしょう。

データセットデザイナーには表示されない1年前にいくつかのマシンがありました。ハードウェアアクセラレーションを削除して、表示してもらう必要がありました。そのため、いくつかのマシンはすでにそのように実行されています。

他のヒント

これはGDI+のバグのように見えます。リソースの不足を本当にうまく処理しないと思います。 Windowsは、プロセスに、ペンやブラシなどのハンドル、Windows、GDIリソースなどのクォータを提供します。それらの10000を超える場合、プログラムのリークが問題であると仮定して、それ以上の与えることを拒否します。

これは、taskmgr.exe、processes tabで表示できます。表示 +選択列、ティックハンドル、ユーザーオブジェクト、GDIオブジェクトを選択します。これらの1つが割り当てに近づくと、あらゆる種類の悲惨さが起こり始めます。通常、奇妙さをペイントします。しかし、API呼び出しがnullを返すことを確認しないと、コードがクラッシュする可能性があります。管理されていないコードではあまりにも一般的です。

GDI+はそうでした 多くの Vistaのために改善されたため、開発者は最近XPを実行するべきではありません。 Win7はとてもいいです。また、UACとセッション0の分離に対処することを学ぶ唯一の本当の方法。

可能な回避策として、superuser.comでデフォルトのプロセスクォータを増やす方法を尋ねます。レジストリのどこか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top