バイナリ リソース (主に画像と PDF) を提供するサービスに OpenRasta を使用しています。これらのいくつかは比較的大きい (5-75MB)。パフォーマンスに関する問題が発生しており、ANTS メモリ プロファイラーを使用して、メモリ リークが発生しているように見えると判断しました。
私たちは DI に StructureMap を使用しており、ブログ投稿で次の変更を見つけました。
public void HandleIncomingRequestProcessed()
{
HttpContextLifecycle.DisposeAndClearAll();
}
さらに変更を加えると、リークはなくなりました。
public void HandleIncomingRequestProcessed()
{
HttpContextLifecycle.DisposeAndClearAll();
ObjectFactory.EjectAllInstancesOf<IRequest>();
ObjectFactory.EjectAllInstancesOf<IResponse>();
ObjectFactory.EjectAllInstancesOf<ICommunicationContext>();
}
編集: 同時リクエストが台無しになるため、これは良い考えではありません。回答へのコメントを参照してください。
本質的に、私が知りたいのは、これは何かを台無しにするのでしょうか? それとも提出する価値のあるプルリクエストですか?
プロファイラーの前後の写真は次のとおりです。
ありがとう-