多くの同時取得要求が発生している場合、API .NET 4.5.2のコントローラでメモリ不足が発生しています。メモリ不足は、大きな画像をダウンロードするメモリストリームから発生します。これは、要求が処理する必要がある処理の一部です。OutOfMemoryExceptionを引き起こすASP.NET MVCコントローラスレッド
プロセスメソッドをロックする以外に、同時に実行されるスレッドの量を減らす方法はありますか? IEは同時に2〜3のプロセスメソッドを実行することができます。これにより、メモリーを使い果たしていないときに最大限の効率が得られます。プロセスをロックするとメモリが不足する問題を解決できますが、使用可能なメモリをすべて使用していないプロセスを1つずつ許可し、実行時間を短縮します。
GETリクエストがAPIに来るたびに、作成されているスレッドにアクセスする方法や追跡する方法がわかりません。これはAzureサーバーにデプロイされていますが、これにはツールがありますか?今、私が一度に多くのユーザーに対応する方法は、複数のインスタンスにスケーリングすることです。
[HttpGet]
[Route("example")]
public HttpResponseMessage GetImage([FromUri] ImageParams imageParams){
Image template = Image.FromFile(
System.Web.Hosting.HostingEnvironment.MapPath("~/Content/Images/image.png");
return ProccessImage(imageParams, template);
}
APIがすべてのファイルを一度にダウンロードしようとするため、Image.FromFile行にメモリ不足がスローされます。
使用している操作方法を教えてもらえますか?少なくとも画像が使用しているストリーム。 – krillgar
編集中に完了 – Jaked222
固定数のプロセスがGET要求を実行した後にロックを使用できます。メソッドエントリの(Interlocked.Increment)をインクリメントし、終了時にデクリメントするグローバルスタティックカウンタを作成します。そのカウンタがしきい値に達した場合は、ロックを使用します。ロックの代わりにMonitor.Enter/Monitor.Exit(try/finallyを使用)が必要な場合があります。 –