0

これが私の設定です。Web ページでも使用できる機能を実装する、ローカル クライアント マシン用の .NET アプリケーションを作成しました。この例を単純にするために、クライアントが、データを入力してデータを取得できるソフトウェアをインストールすると仮定します。

アイデアは、ユーザーが同じデータを入力し、上記と同じ結果を返すフォームを保持する Web ページを作成することです。同社の Web サーバーが利用可能であるため、最初のアイデアは mono Web サービスを作成することでしたが、これは不明な理由で却下されました。「サービス」は Web サービスとして実行されるのではなく、PHP スクリプトによって呼び出される必要があります。これは現在、PHP から shell_exec を介して mono アプリケーションを呼び出すことで実現されています。

だから今、私は自分のアプリケーションのモノポートで立ち往生しています。これは正常に動作しますが、実行に時間がかかりすぎます。不要な dll やメソッドなどはすべて削除しましたが、コマンド ライン経由でアプリケーションを呼び出し、コマンドライン パラメーター経由で目的のデータを送信すると、約 700 ミリ秒かかります。1 秒あたり約 10 ヒットが予想されるため、これは、このタスク用に多数のサーバーをセットアップする場合にのみ機能します。

700m は毎回アプリケーションを開始するコストに関連していると思います。リクエストを 1 回または 500 回しか処理しない場合、時間の点で大きな違いはないからです (元の入力を少し変更して実行します)。毎回「新しい」データで 500 回の反復. 2 回目の反復から開始すると、処理時間は反復ごとに約 1ms に低下します)

次に考えたのは、mono アプリケーションをリモーティング サーバーとしてセットアップすることでした。これにより、アプリケーションを 1 回起動するだけで、着信要求を処理できるようになります。そのため、クライアントとして機能する別の mono アプリケーションを作成しました。クライアントを呼び出し、クライアントにデータをサーバーに渡させ、結果を取得するのに 344 ミリ秒かかるようになりました。これは優れていますが、それでも私が期待し、望んでいたよりもずっと遅いです。

その後、このブログ投稿に基づいて新しいプロジェクトをゼロから実装しましたが、同じパフォーマンスの問題に悩まされています。

問題は、クライアント/サーバーの速度を向上させる可能性のあるモノプロジェクトに関連する何かが欠けているのでしょうか? このタスクのために Web サービスを作成するという考えは却下されましたが、リモート処理は Web サービスよりも高速であると言われていますが、Web サービスはこれらの状況でより優れたパフォーマンスを発揮しますか?


私はそれをより明確にすることができましたが、Webサービスを実装することは現在オプションではありません(理由は聞かないでください、私は要件を書きませんでした;))

その間、リモート シナリオで最も時間がかかるのは実際にクライアントの起動であることを確認しました。

コマンド ラインからパイプ経由でサーバーにアクセスすることは想像できますが、これは私のシナリオに最適です。これはソケットを使用して行われると思いますか?

4

2 に答える 2

3

AOT を使用して起動時間を短縮できます。.NET では、その目的のために ngen を使用します。mono では、アプリケーションで使用されるすべてのアセンブリで mono --aot を実行します。

AOT で処理されたコードは JIT で処理されたコードよりも遅くなりますが、起動時間が短縮されるという利点があります。

mscorlib や System.

于 2008-09-23T20:17:23.583 に答える
1

このシナリオでリモート処理を使用するのは理想的ではないと思います。ただし、毎回起動するのではなく、サーバー上でモノを使用するというあなたの考えは確かに堅実です。

HTTP 経由で SOAP Web サービスを使用することを検討しましたか? これは、「Web ページ」のシナリオにも役立ちます。

私の経験では少し遅いかもしれませんが、カスタムの RESTful サービスの実装は、リモーティングよりも簡単に操作できます。

于 2008-09-23T12:41:52.273 に答える