【解決方法】C# WPF のプログラムの実行を続行するにはメモリが不十分です


プロジェクト: SQL Server データベースに接続する MS Access ADP 2003 プロジェクトで作成した会計プロジェクトがありました。Access ではアニメーションを備えた美しくモダンなユーザー インターフェイスを作成することができないため、プログラムを書き直すことにしました。そのプロジェクトを変換したいと考えています。高速なプログラムとアニメーションを備えた美しい UI とユーザーがアプリケーション全体のテーマをダークまたはライトに変更できる機能を備えたプロジェクトに C# WPF を記述しました。

プロジェクト情報: .NET Framework 4.7.2 を使用した C# WPF、アプリケーション全体のダーク/ライト テーマの設定にマテリアル デザインも使用しました

OS: Windows 10 x64、8GB RAM

コード: 請求書ウィンドウ ↓

XAML: XAML

C#: Cシャープ

私のプロジェクトは RAM の消費量が非常に多いのですが、プロジェクトが大きくなったので、MainWindow でウィンドウをロードしようとすると、次のエラーが表示されます。

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            new HEAD_LST_FROOSH22().Show();
        }
Error:

System.OutOfMemoryException: 'Insufficient memory to continue the execution of the program.

私が試したこと:

このエラーをチェックするために必要なすべてのデータを提供しようとしましたが、これは一般的なエラーであり、概要コードについては誰もコメントできません。 コード全体を読む人はいないと思いますが、一目見ただけで意見やヒントを提供してくれる人はいます。

皆さんありがとう

アップデート :

「マテリアルデザイン」を疑われたため、UIをテストするために小さなC# WPFを作成しました

それで、それは次のとおりです:

スクリーンショット

解決策 1

これだけの情報で何かを言うのは難しいですが、次のとおりです。
Win10 の 8 GB Ram は、Windwos 自体が最大 5 GB を占有するため、それほど多くのメモリではありません。
残りのメモリで何が起こるか、そして十分かどうかはアプリケーション次第です…

解決策 2

引用:

C# WPF のプログラムの実行を続行するにはメモリが不十分です

大雑把な推測には十分な情報がほとんど提供されませんでしたが、賢明な解決策には十分でした。
唯一賢明なのは、12 GB または 16 GB の PC で試して、問題がまだ発生するかどうかを確認することです。

W10 はメモリを大量に消費しており、マルウェア対策機能を詰め込む必要があります。W10、マルウェア対策機能、その他の機能には 8GB で十分ですが、ユーザー アプリにはあまり残らないのはごく普通のことかもしれません。

それ以外の場合、この問題はマスターされていない再帰コードに典型的なものです。

PC を実際に触って測定し、何がメモリを消費し、どのようにメモリが消費されるかを理解することなしには、解決することはできません。 T6この種のアクティビティは一般に専門家向けであり、費やす時間がかかるため費用がかかります。

解決策 3

ラルフとパトリスが言ったことに追加します…あなたが示したコードがそのエラーメッセージを引き起こす可能性がある唯一の方法は、このコードが

private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            new HEAD_LST_FROOSH22().Show();
        }

の一部です HEAD_LST_FROOSH22 クラス、または HEAD_LST_FROOSH22 class は現在のクラスのインスタンスを作成し、その結果として無制限の再帰が発生します。

「無制限の再帰」とは何かを説明してみましょう。現実の世界では、あなたにはお茶を淹れるというやるべき仕事があります。 しかし、一杯のお茶を作るためには水を沸騰させなければなりません、そしてやかんの所有者はあなたが彼らに一杯のお茶を与えるときだけあなたにそれを与えます。
お茶を入れるためのやかんを手に入れるためには、お茶を入れるためのやかんが必要なので、そのタスクを完了することはできません。

コンピューティングでも同じことが起こります。メソッド A がそれ自体を呼び出します (直接再帰)。
または、メソッド A を呼び出すメソッド B を呼び出します (間接再帰)。 メソッドを呼び出すたびにアプリケーション スタック上の領域が使用されるため、すぐにスタック全体が使い果たされ、「メモリ不足」エラーが発生します。 スタックは非常に小さい (わずか 1MB) ため、それを超えるのは非常に簡単です。

したがって、「コード全体」を調べることから始めて、そのコードを含む呼び出しと HEAD_LST_FROOSH22 クラスは。

コメント

タイトルとURLをコピーしました