1

バイナリ リソース (主に画像と 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>();
}

編集: 同時リクエストが台無しになるため、これは良い考えではありません。回答へのコメントを参照してください。

本質的に、私が知りたいのは、これは何かを台無しにするのでしょうか? それとも提出する価値のあるプルリクエストですか?

プロファイラーの前後の写真は次のとおりです。

前

後

ありがとう-

4

1 に答える 1

1

プルリクエストを実行します。SMのサポートが不十分で、コンテキストストアが使用されていないため、(他の問題の中でも)発生している問題があります。

そうは言っても、IRequestのすべてのインスタンスを削除すると、SMが使用するhttpコンテキスト内のすべてのインスタンスが削除されませんか?そこでドキュメントを確認することをお勧めします。

于 2012-04-17T16:11:28.850 に答える