フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: Delphiで作ったプログラムはなぜサイズが大きいんですか
snail3
メンバー
投稿数: 39
Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/18 23:24 Mon

以前も別のところで聞いたんですが、

・リソースなんかが入っているからサイズが大きいのは仕方がない。
・最近のPCは性能がいいから大きくても問題ない。

といった答えが返ってきました。したしやっぱり割り切れません。VBは共通ライブラリを使っている
から小さいのはわかりますが、それにしてもVB6で作れば1Mいかないプログラムが
Delphiで作ると10M後半のサイズになってしまうのは、気分のいいものではありません。

特に最近のOSはサイズが大きいプログラムはクリックした後、何をしているのかしばらく無応答に
なることも珍しくありません。VB6で作成したプログラムは起動が速いので、比べられると胃が痛くなります。

ここにお住まいの方々は、そこら辺の知識が豊富だと思うので、底辺の私にもわかるように教えていただけないでしょうか。 _(._.)_

DEKO
管理者
投稿数: 2690
Re: Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/19 00:14 Tue

引用 snail3 on 2013/11/18 23:24 Mon
それにしてもVB6で作れば1Mいかないプログラムが
Delphiで作ると10M後半のサイズになってしまうのは、気分のいいものではありません。

 
FireMonkey 64bit アプリでもない限り、それは有り得ないような…?
(VB6 と Delphi で全く同じ機能のアプリケーションですか?)

デバッグビルドで EXE サイズを調べてらっしゃいませんか?デバッグ情報を埋め込めば当然サイズは大きくなります。

See Also:
[Delphi が生成した実行ファイルデカくね?(Delphi Forum)]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=474

snail3
メンバー
投稿数: 39
Re: Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/19 08:57 Tue

>See Also:
>[Delphi が生成した実行ファイルデカくね?(Delphi Forum)]
>http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=474

ズバリ、そのもものタイトルですでに書かれていたんですね。

ご指摘の通りデバッグモードでコンパイルしていました。

考えてみれば以前も同じようにサイズを小さくしようと思って調べて、
実行時パッケージを使う方法がよくわからずに、そのままになっていました。

もう少し基礎を勉強したいと思います。

snail3
メンバー
投稿数: 39
Re: Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/26 15:14 Tue

あっという間に1週間、時間がたつのは早いですね。

少し調べてみました。以前書いたアプリのサイズですが、
物理 実行時
VB6 (見積書作成) 0.6M 22M
VB6 (参考印字) 0.36M 24M
Debug無 DelphiXE2 11.4M 29M
Debug付 DelphiXE2 18.1M 48M

どちらのアプリも見積書作成プログラムでDelphiアプリはVBプログラムに印字機能を追加
したものです。実際に起動するとDelphiプログラムは5秒程度無応答の後に起動します。
5秒というのは、クリックするのを忘れたか?と疑問に思うには十分な時間です。

Mr.XRAYさんのサイトを参考に対策というか別アプリで実験してみました。
参考にしたサイト
http://mrxray.on.coocan.jp/Delphi/plSamples/005_FormInPackage.htm

結果
MenuP2012.exe 25.3M → 実行時パッケージを利用したEXEサイズ 1.3M

と約1/20になりました。FormCreate で外に出した部分を読み込むので
対して早くならないかな?と思っていましたが起動時間も短くなりました。
以下行った作業を簡単に書いておきます。

実行時パッケージ利用手順
———————————
1.パッケージを作成する
 a.新規パッケージを作成して、とりあえず元アプリから1つフォームを登録する。
 b.パッケージに名前を付けて保存する。
 c.残りのフォームは元アプリの xxx.dpr ファイルをエディタで開き、
   元アプリと同じフォームを contains 区にならべる。
 d.パッケージをビルドする。ビルドの途中で何か追加するか?聞いてくるので追加。
   ビルドエラーが発生する場合は、エラーになっているものを消す。 ←かなり適当

2.作成したパッケージを作成するアプリのフォルダーにコピーする。
  ※ 環境オプションを変更していないと $(BDSCOMMONDIR)\Bpl に作成される。
  ※ $(BDSCOMMONDIR)\Bpl の位置がわからないときは … ボタンをクリックする。

3.元アプリの FormCreate と FormDestroy を修正

FormCreate
FHandleModule := LoadPackage('xxx.bpl'); // ←ここでパッケージロード

FormDestroy
if Assigned( FHandleModule ) = True then // ←自分でロードしたパッケージは
UnloadPackage( FHandleModule ); // 自分で消す

4.呼び出されるフォームに RegisterClass を追加
initialization
RegisterClass( TxxxForm );

5.アプリの「プロジェクトオプション」「パッケージ」「実行時パッケージ」に1で作成した
  パッケージ名を追加して、コンパイル実行

みなさんありがとうございました。

Mr.XRAY
メンバー
投稿数: 192
Re: Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/27 09:07 Wed

EXE のサイズが大きいからと言って,必ずも起動が遅くなるとは限らないとは思うのですが.
例えば,以下のファイル内の EXE は約 50 MB ありますが,一瞬で起動します.
科学の実験は,極端なことを考えてみるといいというので,ちょっと実験してみました.

[05_実行形式ファイル (EXE) のサイズと EXE の起動時間]
http://mrxray.on.coocan.jp/Delphi/plSamples/005_FormInPackage.htm#05
(2014年5月13日 リンクを変更しました)

ユーザに「待たせるな~」と感じさせない時間は 3 秒と言いますから,
何らかの工夫が必要かも.スプラッシュウィンドウを表示するのも手かも知れません.
ユーザが不安にならないためにも,とにかく何かを表示するとかですね.

guest
メンバー
投稿数: 1
Re: Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/27 22:52 Wed

http://blogs.wankuma.com/hirase/archive/2008/12/24/164835.aspx
そうです、とりあえずフォームを表示です

snail3
メンバー
投稿数: 39
Re: Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/28 13:23 Thu

引用 Mr.XRAY on 2013/11/27 09:07 Wed
>EXE のサイズが大きいからと言って,必ずも起動が遅くなるとは限らないとは思うのですが.
>例えば,以下のファイル内の EXE は約 50 MB ありますが,一瞬で起動します.

XP SP3 からだったと思いますが、起動前にWindowsが何かチェックするみたいです。
(もしかしたらNOD32というウィルス対策ソフトが何かしているかもしれませんが)

私のメイン環境は Win7 Pro です。
このファイル「c:\temp」フォルダに置いて実行しました。2回目以降は
「発行元を確認できませんでした。~」が瞬時に表示されまのすが
初回は5秒以上待たされました。

Delphi の場合、リンクされる単位がモジュールだと思うのですが
C言語の様に関数単位でリンクされれば、もっとスリムになると思います。

snail3
メンバー
投稿数: 39
Re: Delphiで作ったプログラムはなぜサイズが大きいんですか
on: 2013/11/28 14:07 Thu

コードを見直したところ、 スプラッシュウィンドウがDB接続後に表示するようになっていました。 (^^;)

とりあえず、これだけでも2秒程度見た目の起動が速くなりました。

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.046 sec.