5

matlab プログラムを .net アセンブリ、つまり dll ファイルに変換しました。dll ファイルを追加するコンソール C# アプリケーションを作成し、それを php から呼び出しました。MCR は、.exe が呼び出されるたびに呼び出されます。サーバーの起動時にMCRを初期化し、一定時間後にexeが呼び出されても毎回閉じないようにするにはどうすればよいですか??また、このプロセスを高速化する他の方法があれば提案してください。

4

2 に答える 2

7

ここで直接できることはあまりありません。MCR アーキテクチャの初期費用は高くなります。繰り返し呼び出される実行時間の短いプログラムには向いていません。

次の方法で高速化できます。

  • MCR を実行している各マシンに MCR がローカルにインストールされていることを確認する
  • コンパイル済みの Matlab プログラムの CTF アーカイブの事前展開
  • コンパイルされたプログラムを、それを実行している各マシンにローカルにデプロイする
  • ソリッド ステート ドライブの購入
  • プログラムのダミー実行をバックグラウンドで定期的に実行して、ファイルがディスク キャッシュ内で「ウォーム」状態に保たれるようにします。

しかし、これらはおそらく超高速ではありません。ほとんどの場合、合理的なページの読み込み時間に対して十分な速度ではありません。

実際に高速化するには、プログラム アーキテクチャをクライアント/サーバー アーキテクチャに変更する必要がある場合があります。この場合、MCR コードが実行されている永続的なサーバー プロセスを起動し、PHP クライアントに要求を提供します。リクエストが「クリーンな」コンテキストで処理されるようにするには、追加のコーディングを行う必要があります。

また、MCR dll を Web サーバーにロードして、サーバーの存続期間中持続するようにすることもできます。これはより簡単なセットアップになりますが、シングル スレッドの Matlab セッションによって制限される可能性があり、各要求のクリーンな開始点を取得する必要があります。

これに対する MathWorks のソリューションは、新しいMatlab Production Serverです。これは、コンパイルされた MCR コードをワーカー プールにロードし、ウォームアップされたプリロードされた Matlab ワーカー インスタンスからクライアント M コード要求を処理できます。MCR アプリでまさにこの問題に対処します。これまたは DIY クライアント/サーバー アプローチのポイントは、クライアント リクエストが発生する前に Matlab セッションで MCR コードを "スピンアップ" することです。そのため、クライアントは MCR の起動コストが高くなることはありません。

編集: MCR コンポーネントを Web に展開するための MathWorks ガイド全体、MATLAB Application Deployment Web Example Guideがあり、Matlab Production Server だけを使用していません。彼らは主にクライアント/サーバーに移行するように言っているように見えますが、負荷レベルを低くするために、MCR コンポーネントを Web サーバーに直接ロードすることもできます。

于 2013-04-22T05:41:53.913 に答える
0

上記のすべての回答MCR_CACHE_ROOTに加えて、RAM ドライブをセットアップし、システム変数を RAM ドライブのディレクトリに設定することをお勧めします。

これにより、さらに起動時間が大幅に改善されます。

誰かがデスクトップでこのスキームを使用している場合は、再起動中に RAM ドライブが永続的であることを確認してください。

于 2020-04-02T10:57:24.797 に答える