2017-01-04 5 views
0

私はIISでphp-cgi.exeによって読み込まれたページに基づいてWebアプリケーションを実行しています。IISで実行されているPHPからCOMオブジェクトをインスタンス化するより効率的な方法はありますか?

私は、COMに公開の.NETライブラリを作成TLBを生成し、それを登録することができます

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\TlbExp.exe" RomCom.dll 
c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /u RomCom.dll 
c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase RomCom.dll /tlb:RomCom.tlb 

を...そしてthusly PHPのクラスのメンバーにアクセス:

$commie = new COM("RomCom.LettersClass"); 
print_r($commie->X); 

しかし、このようにインスタンス化されると、COMオブジェクトを含むライブラリは各PHP実行の中でロードするのに時間がかかります - microtime()にその行をラップすると、On My Machine™に約0.2秒かかることがわかります。その後のインスタンス内各PHPの実行がはるかに少ないコストがかかるので、私はこのコストはCOMライブラリの検索によるもののどちらかであると仮定し、またはライブラリがPHP環境

にロードされたときに起こるいくつかのものにこのCOMオブジェクトの読み込みを高速化するために、PHP環境またはIISを構成する方法はありますか?

ボーナス質問:正しい質問をしていますか、またはPHPから.NETコードを呼び出す方法がありますか?私はNetPhpライブラリについて読んだことがありますが、私の理解では、フードの下でCOMクラスを使用しているので、同じパフォーマンスのペナルティが課せられます。

+1

「COMオブジェクト」? 2017年?真剣に? – arkascha

+0

ええ、私は知っています。ボーナスの質問にお気軽にお答えください。 –

答えて

1

200msはCLRを読み込むために非常に高いようですが、CPUプロファイリングを行って何が長くかかるかを判断することを検討する必要があります。アセンブリをngenするか、高価なオブジェクトを遅延初期化するとかなりのメリットが得られます。あなたが見ない限り、あなたは知らないでしょう。リサイクル時間を増やして、負荷の数を最小限に抑えることもできます。

これは、サービス対象コンポーネントまたはアウトプロセスサーバーの候補です。いずれの場合も、呼び出し側のphp-cgiプロセスの存続期間を超えて実行される別のプロセスで実行されている.NET COM Serverになります。

Serviced Components in VB.NETには概要があり、すぐにC#に翻訳することができます。 MSDNの.Net 2にはa sampleもあります。どちらの場合でも、トランザクションのものは無視できます。

最新のルートは、ローカルのWCFまたはMVC Webサービスを持つことです。 COMやWebサービスのどちらに関係なく、ほぼ同等のパフォーマンスを得ることができます。開発やトラブルシューティングに最も適しているかどうかにかかっています。

関連する問題