ネイティブ コードとマネージド コード
IIS は、ネイティブ コードを使用して静的ファイルを提供し、そのパフォーマンスを達成するために積極的なメモリ内キャッシュを使用する可能性があります。
ServiceStack は、コードが ASP.NET の応答ストリームに直接書き込む .NET ライブラリであるため、マネージ .NET コードでファイルをストリーミングする際に高速化することは困難です。ファイルをメモリにロードし、代わりに raw バイトを書き込むことで、パフォーマンスをさらに向上させることができます。
HTTP キャッシングを利用する
そのため、コードを管理する必要がある場合は、StaticFileHandlerで行っている HTTP キャッシング(つまり、ServiceStack が css/js/html ページなどの静的コンテンツを提供するために使用するもの) を利用するために最善を尽くす必要があります。
生の HttpHandler を登録する
ServiceStack のリクエスト パイプラインは高度に最適化されていますが (つまり、オーバーヘッドがあまり追加されません)、独自のカスタムIHttpHandler
を登録することでそれをバイパスし、生の ASP.NET リクエストを自分で処理することができます。これは、.NET コードで最速のオプションとなります。 :
SetConfig(new EndpointHostConfig {
RawHttpHandlers = { MiniProfilerHandler.MatchesRequest },
});
これは、組み込みの MiniProfiler が静的コンテンツを提供するために使用するものです。MatchesRequestはIHttpRequest
、リクエストを処理する必要があるか (IHttpHandler のインスタンスを返すことにより)、処理しないか (null を返す) を処理するだけです。
public static IHttpHandler MatchesRequest(IHttpRequest request)
{
var file = Path.GetFileNameWithoutExtension(request.PathInfo);
return file != null && file.StartsWith("ss-")
? new MiniProfilerHandler()
: null;
}
それ以外では、ServiceStack のスタンドアロン バージョン (つまり、HttpListener ホスト) は、ASP.NET よりも優れた生のスループットを提供するはずです。