環境:
ビデオを再生するデスクトップアプリケーションがあります。このビデオはプロジェクトの一部であり、プロジェクトはインストーラーにパッケージ化されています。インストーラプロジェクトをビルドするときに、次のエラーメッセージが表示されることがあります。
この操作を完了するのに十分なストレージが利用できません
Visual Studioを再起動すると機能します。
これを回避する方法はありますか?インストーラーでビデオをパッケージ化するより良い方法はありますか?
これは通常、ビルドプロセスで多くのRAMメモリを必要とし、それを取得できない場合に発生します。
実行中のアプリケーションのいくつかを閉じてみてください。マシンにさらにRAMを追加するか、ページファイルを増やすこともできます。
問題
私の場合、問題は、非常に大きな(1.5GB)テストファイルを埋め込みリソースとして含むテストプロジェクトにありました。私のマシンには16GB RAMがあり、これが発生したときに8GBの空き容量があったため、RAMは問題ではありませんでした。
CLRが1つのオブジェクトに対して持つ2 GBの制限に達した可能性があります。 MSBuildが内部で何をしているのかを詳しく調べることなく、コンパイル時に、埋め込みリソースがこの制限に達したオブジェクトグラフにロードされると推測することができます。
エラーメッセージは非常に役に立ちません。私が最初に考えたのは、「ディスク容量が足りなくなった」というものでした。
ソリューション
これは、ファイル検証テストプロジェクトです。要件の1つは、このサイズのファイルを処理できることです。そのため、私のチームは額面通り、テストケースで使用するためにそれを埋め込むのが合理的だと考えました。
エラーを修正するには、ファイルをネットワークに移動し(本番のバリデーターがアクセスするのと同じ方法で)、テストを単体テストではなく統合テストとしてマークします。結局のところ、単体テストは高速で実行されるはずではありませんか?
Windows XPのVisual Studio 2010でC#ソリューションをコンパイルしようとすると、この質問に出会いました。 1つのプロジェクトにはかなりの数の埋め込みリソースがあり(結果のアセンブリのサイズは〜140MiBでした)、ソリューションをコンパイルできませんでした。
この操作を完了するのに十分なストレージが利用できません
ビルド出力のエラー。
この質問に対する答えは役に立たなかったが、social.msdn.Microsoftの ScottBurton42 による「 この操作を完了するのに十分なストレージが利用できない 」に対する答えを見つけた。 com。 3GB
スイッチにBoot.ini
スイッチを追加し、devenv.exe
大規模アドレスを認識することをお勧めします。 3GB
スイッチをBoot.ini
ファイルに追加すると、私にとってはうまくいきました(Visual Studio 2010以降のdevenv.exe
はalready大きいと思います) -アドレス認識)。
私の答えはその答えに基づいています。
解決策1:/3GB
Boot.ini
スイッチを設定する
MSDNのページ メモリサポートとWindowsオペレーティングシステム は次のように述べています。
プロセスとアプリケーションの仮想アドレス空間は、
/3GB
スイッチでBoot.ini
スイッチが使用されていない限り、依然として2 GBに制限されています。
/3GB
スイッチは、プロセスヘッダーでIMAGE_FILE_LARGE_ADDRESS_AWARE
を使用するアプリケーションに3 GBの仮想アドレススペースを割り当てます。このスイッチにより、アプリケーションは、2 GBを超える1 GBの追加の仮想アドレススペースに対応できます。プロセスとアプリケーションの仮想アドレス空間は、
/3GB
でBoot.ini file
スイッチが使用されていない限り、依然として2 GBに制限されています。次の例は、Boot.ini
ファイルに/ 3GBパラメーターを追加して、アプリケーションメモリのチューニングを有効にする方法を示しています。[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(2)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB
注:前の例の「
????
」は、オペレーティングシステムのプログラム名です。
Windows XPでは、Boot.ini
ファイルを次のように変更できます。
MSDNの /3GB
スイッチのページには次のように記載されています。
32ビットバージョンのWindowsでは、
/3GB
パラメーターは4 GT RAM Tuning、ユーザーモードの仮想アドレススペースを3 GBに拡大し、カーネルモードを制限する機能を有効にしますコンポーネントを残りの1 GBに追加します。
/3GB
パラメータは、Windows Server 2003、Windows XP、およびWindows 2000でサポートされています。WindowsVista以降のバージョンのWindowsでは、IncreaseUserVA
でBCDEdit
要素を使用します。
マシンを再起動すると、設定が有効になります。
解決策2:devenv.exe
大規模アドレスを認識させる:
Visual Studioコマンドプロンプト(またはVisual Studioのバージョンに応じて開発者コマンドプロンプト)を開きます。
次のコマンドラインを入力して実行します。
editbin /LARGEADDRESSAWARE {path}\devenv.exe`
ここで、{path}
はdevenv.exe
へのパスです(Visual Studioのショートカットのプロパティに移動して、これを見つけることができます)。
これにより、devenv.exe
が2GBではなく3GBのメモリにアクセスできるようになります。
ソリューションのクリーニングと再構築がうまくいった
私の場合、Cドライブに残っているメモリは非常に少なかった。 Cドライブからいくつかのアイテムをクリアして、再試行しました。動いた。
私は答えるのが遅れるかもしれませんが、今後の参考のために、Windowsダンプファイルの設定を確認することをお勧めします(そして、おそらくnoneに設定します)。
私の場合、コードを実行していたサーバーは、並列化されたコードを処理できませんでした。
通常、次のようなセットアップを実行しています
new ParallelOptions { MaxDegreeOfParallelism = Math.Max(1, Environment.ProcessorCount / 2) }
変数を導入し、1に使用されたコアのロックダウンを許可すると(次のようなコードになります)、この問題は解決しました。
new ParallelOptions { MaxDegreeOfParallelism = 1 }
私は答えるのに遅れていますが、他の人には役立つかもしれません私の場合、Visual Studioを再起動するだけで問題が修正されます
Visual Studioの場合、次のことを試みることができます。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE
。editbin /LARGEADDRESSAWARE devenv.exe
。お役に立てれば )
私にとって重要な点は、アプリケーションに巨大なデータベーステンプレート(テストで大量のデータが格納されていた)を埋め込んだことです。埋め込みリソースを適切に削除し、データベースをリソースフォルダーに移動するため、この問題は発生していません。
この問題は、サイズが大きい* .rptファイルを削除または無効化(除外)することで修正し、レポートを最適化しました。