Q46:[外部プログラム通信]コンポーネントを利用してアプリケーションローダを起動させて連動させる方法だと、アプリケーションローダを毎回起動させるため、かなりの時間がかかってしまいます。
Q46-1:
以前メールで別々に作成したアプリケーションを連動して動作させる方法について確認させて頂きました。その際、[外部プログラム通信]コンポーネントを利用してアプリケーションローダを起動させて連動させる方法を教えて頂きました。しかし、この方法だと、アプリケーションローダを毎回起動させるため、かなりの時間がかかってしまいます。MZプラットフォームのサンプル(i3panel メイン画面)は起動にあまり時間がかかりません。あのサンプルと同じように作成することはできるのでしょうか?
A46-1:
付属のサンプルアプリケーション起動(sampleApplication.exe)は、登録されているサンプルアプリケーションを複合コンポーネント化したものを内部に保持しており、[起動]ボタンクリックにより各複合コンポーネントの公開メソッドを起動する構成になっています。参考のため、同様の構成を持つMZPFアプリケーションを、本文末尾の関連ファイルに掲載致しましたので、どうぞご覧下さい。
このように、別々に作成したアプリケーションを複合コンポーネント化して1つのアプリケーションに統合することで、個々のサブアプリケーションの起動を早くすることができます。一方、統合化されたアプリケーションのファイルサイズは大きくなりますので、そのロードには時間が掛かることになります。実際、ビルダーやローダーと比較して、sampleApplication.exeの起動には多くの時間が必要です。(sampleApplication.exeはアプリケーションデータを内部に圧縮して保持しているため、見かけ上のサイズは600KBほどで済んでいます。)
これに対して、外部プログラム通信コンポーネントを利用した場合には、一度にロードされるファイルサイズが小さくなるため初回起動は比較的短時間で済む一方、サブアプリケーション起動時にはローダー(すなわちJVM)を新規に起動することになりますので、そこで時間が掛かることになります。
これらは避けられないトレードオフであり、どちらの方法を採用するかはアプリケーションの仕様や利用形態に基づいて判断していただくしかありません。
なお、ご利用のJava環境が同一、すなわちJavaの複数バージョンが混在しない環境であれば、アプリケーションファイルをXML形式(拡張子.mzax)ではなくバイナリ形式(拡張子.mzas)で保存することにより、ロード時間を短縮することができます。
また、テーブルやグラフ、イメージビューワ等のGUI部品にグラフィックデータを保持したままでアプリケーションを保存するとファイルサイズが大きくなり、次回のロードに時間が掛かります。それらのデータが、外部のファイルやデータベース等から取得されるものであり、アプリケーションデータとして保存する必要がないものであれば、アプリケーション終了時にデータのクリア処理を行ってから保存することでファイルサイズを小さくすることができます。データのクリア処理の例につきましては、付属の「サンプル(グラフ化)」(グラフ化.mzax)等をご覧下さい。
関連ファイル:サンプル起動mzax (※このファイルは、ZIP形式に圧縮してあります。)