0

非常に基本的な ASP.NET Web サービスがあります。

動作しますが、最初の呼び出しには 10 秒かかりますが、その後の呼び出しは即座に行われます。

JITコンパイルされていることを認識しているため、最初の呼び出しを高速化するためにプリコンパイルする方法を理解しようとしています。

これまでのところ、私がやったことは次のとおりです。

Web サービス ファイルは次のとおりです。HelloWorldService.cs :

using System.Web.Services;
namespace MyService
{
  public class HelloWorldService: WebService
  {
    [WebMethod]
    public string HelloWorld()
    {
      return "Hello World";
    }
  }
}

私はこれを使用してコンパイルしましたgmcs -target:library HelloWorldService.cs -r:System.Web.Services

結果のHelloWorldService.dllファイルを webroot の /bin ディレクトリ内に配置しました。

次に、HelloWorld.asmx次のように -stub ファイルを作成しました。

<%@WebService Language="C#" Class="MyService.HelloWorldService"%>

これは機能しますが、前述のように、最初の呼び出しが完了するまでに 10 ~ 15 秒かかります... ただし、後続の呼び出しは正常に機能します。

sgen調べていると、ユーティリティを使用してシリアル化された XML ファイルを作成する必要があるという参考文献を見てきました。

私は実行してそのファイルを使用しました:

sgen HelloWorldService.dll

これにより、ファイル名が作成HelloWorldService.XmlSerializers.dllされ、それも/binディレクトリに配置されます。

ただし、これはどれも役に立ちませんでした。

誰でもこれに光を当てることができますか?

4

3 に答える 3

4

通常、本番サービスはほとんど停止しないようにします。変更が必要な場合にのみ再コンパイルされるため、「最初の」リクエストはありません。本番環境で変更を行う (またはサーバーを再起動する) 必要がある場合は、使用頻度の低い時間帯にスケジュールを設定します。許容できる低使用時間がない場合は、Web ファームを使用し、更新中にサーバーをファームから削除し、更新の一部として更新されたサーバーに "最初の" 要求を行ってから、サーバーをファームに戻します。

于 2013-03-10T01:45:02.827 に答える
2

私は何年も .Net を使用してきましたが、Web サービスまたは Web アプリケーションへの最初の呼び出しを高速化するものをまだ見つけていません (一方、Web サイトはページをコンパイルするため、優れています)。呼び出されるたびに 1 つずつ、処理が大幅に高速化されます)...

最初の呼び出しでは常にすべてがコンパイルされます。もちろん、時間がかかります...しかし、その後、「X 時間後にアプリケーション プールをスリープ」しないように IIS をセットアップすれば問題ありません。

私が自分で行うようになったのは、サイトまたは Web サービスを公開するたびに、関係者に「すべて明確な」メッセージを与える前に、ブラウザーで自分自身を呼び出すことです...そうすれば、彼らはインスタサービスを取得しますその時点から。

于 2013-03-10T01:46:50.527 に答える
1

それが ASP.NET に当てはまるかどうかさえわかりませんが、質問に #mono のタグを付けたので、おそらくこれを見てください (まだ見ていない場合): http://www.mono- project.com/AOT

于 2013-03-10T04:11:25.000 に答える