2

ASP.NET + いくつかの .NET Web サービスを IIS 6 (Win 2003 サーバー) で実行しています。問題は、IIS が "c:\WINDOWS\Temp" ディレクトリに大量の (!) ファイルを生成していることです。多くのファイルは数千のファイルを意味し、これまでのところ 3G を超えるサイズになります。

ファイルは次のコマンドで生成されます: C:\WINDOWS\SysWOW64\inetsrv> "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe" /t:library /utf8output /R:"C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\vfagt\113819dd\db0d5802\assembly\dl3\fedc6ef1\006e24d8_3bc9ca01\VfAgentWService.DLL" /R:"C:\WINDOWS\assembly\GAC_MSIL\System .Web.Services\2.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll" /R:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /R:"C:\WINDOWS\ assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll" /out:"C:\ WINDOWS\TEMP\9i_i2bmg.dll" /debug- /optimize+ /nostdlib /D:_DYNAMIC_XMLSERIALIZER_COMPILATION "C:\WINDOWS\TEMP\9i_i2bmg.0.cs"

一時ディレクトリ内のファイルは、*.out と *.err のペアです。*.err ファイルはサイズがゼロで、*.out ファイルにはコンパイル出力メッセージが含まれています。

IIS が非常に多くのファイルを生成する原因は何ですか?

どうすれば防ぐことができますか?

アップデート:

問題は、上記のコマンド (csc.exe) が何度も (何度も) 実行され、.out と .err がディスク領域を消費するまで何度も生成されることです。

だから - 私の質問は: このコマンドが何度も実行される原因は何ですか? (私の Web アプリには、それほど多くの .aspx および .asmx ファイルがありません)。

ありがとう、もえ

4

3 に答える 3

2

防ぐことはできません。IIS + ASP.NET は、.aspx、.asmx、.ascx、.ashx、.asax などのファイルを動的にコンパイルします。これらはすべてテンプレート ファイルであり、最終的に選択した言語 (C#、VB.NET、または ASPX ページの記述に選択したもの) のソース コードに変換されます。

ページの要求が受信されたときの ASP.NET のモデルは次のとおりです。

  • 要求されたページのアセンブリが利用可能で最新のものであるかどうかを確認してください。そうであれば、リクエストをページに渡します。
  • そうでない場合は、関連するテンプレート (aspx、ascx など) からソース コードを生成します。生成されたソース コードを ASP.NET Temp ディレクトリに配置します。
  • ソース ファイルをコンパイルして、動的に名前が付けられ、一時ディレクトリにも配置されるアセンブリにします。C# を使用している場合、ご覧のとおり、csc.exe が実行されます。
  • 新しくコンパイルされたアセンブリをロードします。
  • 要求をそのアセンブリに渡します (例: ステップ 1)

.out および .err ファイルは、csc.exe の呼び出しからの stdout および stderr にすぎません。これらは、3 GB のファイルシステム スペースを消費する可能性は低いです。

ただし、ASPNET は、そのディレクトリ ツリー内の任意のページまたはコントロール (など) によって参照されるすべてのアセンブリの一時コピーも保持します。3 つの異なる ASPX ページで System.Xml.dll を参照すると、ASPNET 一時ファイル ディレクトリ ツリーの 3 つの異なる一時ディレクトリに System.Xml.dll のコピーが配置されます。これらのコピーは蓄積する可能性があり、3GB のほとんどが DLL のコピーになっていると聞いても驚かないでしょう。

詳細については、http://www.codeproject.com/KB/aspnet/ASPXFILES.aspxを参照してください。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Filesディレクトリ内の任意のファイルを削除できます。IIS と ASP.NET がアクティブな間は、これは不可能です。メンテナンス期間がある場合は、サイトがダウンしたときにそれらを削除できます。開発用マシンの場合は、IIS を停止し ( net stop w3svc)、そのフォルダー内のすべてのサブディレクトリを削除してから、IIS を再起動します ( net start w3svc)。


関連:
-一時 ASP.NET ファイルの削除
- 「一時 ASP.NET ファイル」フォルダとは何ですか?

于 2010-03-25T15:52:50.517 に答える
0

これが役立つかどうかはわかりませんが、同様の状況を説明するリンクがいくつかあります

http://geekswithblogs.net/akraus1/archive/2009/09/14/134820.aspx

http://social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/fddb5072-f84b-432a-945a-607e183e1da3

于 2010-03-25T18:21:31.657 に答える