C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 初回の起動時間が遅いことを解消したい(VB2008SP1)


(過去ログ 67 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■38682 / inTopicNo.1)  初回の起動時間が遅いことを解消したい(VB2008SP1)
  
□投稿者/ 夜桜 (6回)-(2009/07/23(Thu) 13:09:43)

分類:[VB.NET/VB2005 以降] 

2009/07/23(Thu) 13:10:19 編集(投稿者)

お世話になります。
VB2008SP1でWindowsフォームアプリケーションを製造しています。

初回の起動時間が遅いことに悩んでおりまして、
質問させて頂きました。

初回の起動時間だけが、7秒くらいかかりまして、
2回目以降は1秒程度で起動できます。
(ストップウォッチで計りましたので、多少の誤差はあると思います。)

私なりに調べてみたのですが、以下のサイトが参考になると思いました。
http://itpro.nikkeibp.co.jp/article/COLUMN/20090311/326373/?ST=develop&P=2

これを見ると.NET Framework3.5 SP1を使っていると、
初回の起動に4〜6秒程度かかると検証されていました。

これをどうにかできないだろうかと思っているのですが、
何か良い案はございませんか?

もしよろしければ、ご教示お願いいたします。
引用返信 編集キー/
■38685 / inTopicNo.2)  Re[1]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ 中博俊 (1325回)-(2009/07/23(Thu) 13:35:27)
引数で
hoge.exe -shutdown とか受け入れるようにして、こっそり起動しておくとかが有名な手段ですね。

他にもいろいろあるけどこれでどうですか?

引用返信 編集キー/
■38700 / inTopicNo.3)  Re[2]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ やじゅ (1128回)-(2009/07/23(Thu) 15:25:51)
やじゅ さんの Web サイト
2009/07/23(Thu) 15:29:27 編集(投稿者)


システムのスタートアップ時に画面が表示されない小さな.NETアプリを起動させておく。
CLRがいったんロードされるので、目的の.NETアプリ起動時のパフォーマンスが良くなる。

仕組みは下記サイトを参考
http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_06/opensemi_06_01.html


>私なりに調べてみたのですが、以下のサイトが参考になると思いました。
>http://itpro.nikkeibp.co.jp/article/COLUMN/20090311/326373/?ST=develop&P=2

VISTAだとガジェット(.NETアプリ)が起動時に動作するから、初回起動はそこそこ速くなると思ってたんだけどな・・・
自分はVISTAが無いから今は検証できないや。
引用返信 編集キー/
■38702 / inTopicNo.4)  Re[1]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ みきぬ (550回)-(2009/07/23(Thu) 15:49:30)
.NET で作ったアプリケーションの初回起動が遅い理由は、大きく2つあります。

・.NET Framework の CLR の起動に時間がかかる
・MSIL からネイティブコードへのコンパイル(実際はこれだけじゃないらしいけど)に時間がかかる

中さんの方法は、この両方に対応できるので効果はより高いと思いますです。
引用返信 編集キー/
■38715 / inTopicNo.5)  Re[2]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ よねKEN (385回)-(2009/07/23(Thu) 16:46:09)
> ・MSIL からネイティブコードへのコンパイル(実際はこれだけじゃないらしいけど)に時間がかかる
>
> 中さんの方法は、この両方に対応できるので効果はより高いと思いますです。

JITコンパイルされたネイティブコードってそのアプリが終了してもキャッシュされるんでしたっけ?
#キャッシュされるっぽいぞともキャッシュされないよとも、情報が見つからなかったので、
#出典があればご教示いただけると幸いです。

引用返信 編集キー/
■38720 / inTopicNo.6)  Re[3]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ みきぬ (555回)-(2009/07/23(Thu) 16:59:05)
2009/07/23(Thu) 17:10:41 編集(投稿者)
2009/07/23(Thu) 17:04:55 編集(投稿者)

No38715 (よねKEN さん) に返信
> JITコンパイルされたネイティブコードってそのアプリが終了してもキャッシュされるんでしたっけ?
> #キャッシュされるっぽいぞともキャッシュされないよとも、情報が見つからなかったので、
> #出典があればご教示いただけると幸いです。
>
あー、確かに見つからないですね。
ngen.exe でネイティブコードをこしらえたときと、記憶が混じっていたかも。

もうちょっと探してみますが、一旦撤回させてください。

----- 以下追加
このへんをとっかかりに探し中…
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17967&forum=7

----- さらに追加
ここによると、
http://msdn.microsoft.com/ja-jp/library/ht8ecch6.aspx

> より重要な点として、JIT コンパイラが生成したコードは、コンパイルを起動したプロセスにバインドされます。複数のプロセスの間でこれを共有することはできません。

とあるので、キャッシュはされないようですね。どうも失礼しました。
引用返信 編集キー/
■38730 / inTopicNo.7)  Re[4]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ なちゃ (317回)-(2009/07/23(Thu) 19:17:21)
多分現実的には、JITの時間はほとんど無視できると思います。
# 大抵の常識的な作りのアプリなら

一番効果大なのはやっぱり1回起動しとく、でしょうね。

引用返信 編集キー/
■38810 / inTopicNo.8)  Re[2]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ 夜桜 (7回)-(2009/07/25(Sat) 12:51:57)
No38685 (中博俊 さん) に返信
> 引数で
> hoge.exe -shutdown とか受け入れるようにして、こっそり起動しておくとかが有名な手段ですね。
>
> 他にもいろいろあるけどこれでどうですか?
>

中博俊さん
ご回答ありがとうございます。
返信が遅くなってしまい、もうしわけございません。

> hoge.exe -shutdown とか受け入れるようにして、こっそり起動しておくとかが有名な手段ですね。
.net framework3.5sp1で作った別アプリを作って、
ユーザーに気付かれないように起動しておくということですね。

-shutdownを受け入れる理由はなぜですか?
ずっと起動していたら、だめなのでしょうか?
また逆に起動して、そのまま終了するアプリではだめなのでしょうか?
皆様にご紹介頂いたURLを参考にCLRのことを調べてみたのですが、
この点がどうしてもうまく理解できませんでした。

もしよろしければ、ご教示お願いいたします。


引用返信 編集キー/
■38812 / inTopicNo.9)  Re[3]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ 夜桜 (8回)-(2009/07/25(Sat) 12:54:32)
No38700 (やじゅ さん) に返信
> 2009/07/23(Thu) 15:29:27 編集(投稿者)
>
>
> システムのスタートアップ時に画面が表示されない小さな.NETアプリを起動させておく。
> CLRがいったんロードされるので、目的の.NETアプリ起動時のパフォーマンスが良くなる。
>
> 仕組みは下記サイトを参考
> http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_06/opensemi_06_01.html
>
>
> >私なりに調べてみたのですが、以下のサイトが参考になると思いました。
> >http://itpro.nikkeibp.co.jp/article/COLUMN/20090311/326373/?ST=develop&P=2
>
> VISTAだとガジェット(.NETアプリ)が起動時に動作するから、初回起動はそこそこ速くなると思ってたんだけどな・・・
> 自分はVISTAが無いから今は検証できないや。

やじゅさん
ご回答ありがとうございます。

> システムのスタートアップ時に画面が表示されない小さな.NETアプリを起動させておく。
> CLRがいったんロードされるので、目的の.NETアプリ起動時のパフォーマンスが良くなる。
>
> 仕組みは下記サイトを参考
> http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_06/opensemi_06_01.html
とても参考になりました。
実際試してみましたが、確かに早くなりました。

上にも質問で書かせて頂いたのですが、.NETアプリは常駐で起動させておく
必要があるのでしょうか?
それとも1度起動してしまえば、すぐに.NETアプリを終了させてもCLRはロードされたままと
なるのでしょうか?
この点をどうしても理解できませんでしたので、ご教示頂けましたら、とても助かります。

ご回答ありがとうございました。

引用返信 編集キー/
■38813 / inTopicNo.10)  Re[2]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ 夜桜 (9回)-(2009/07/25(Sat) 12:56:29)
2009/07/25(Sat) 12:57:57 編集(投稿者)

No38702 (みきぬ さん) に返信
> .NET で作ったアプリケーションの初回起動が遅い理由は、大きく2つあります。
>
> ・.NET Framework の CLR の起動に時間がかかる
> ・MSIL からネイティブコードへのコンパイル(実際はこれだけじゃないらしいけど)に時間がかかる
>
> 中さんの方法は、この両方に対応できるので効果はより高いと思いますです。

みきぬさん
ご回答ありがとうございます。

> ・.NET Framework の CLR の起動に時間がかかる
こちらはCLRを起動することで解消される。

> ・MSIL からネイティブコードへのコンパイル(実際はこれだけじゃないらしいけど)に時間がかかる
こちらはngen.exeを使えば解消される。

という理解で正しいのですよね。
うまく理解できてきました。

とても参考になりました。
ご回答ありがとうございました。

引用返信 編集キー/
■38814 / inTopicNo.11)  Re[4]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ 夜桜 (10回)-(2009/07/25(Sat) 12:57:15)
No38720 (みきぬ さん) に返信
> 2009/07/23(Thu) 17:10:41 編集(投稿者)
> 2009/07/23(Thu) 17:04:55 編集(投稿者)
>
> ■No38715 (よねKEN さん) に返信
>>JITコンパイルされたネイティブコードってそのアプリが終了してもキャッシュされるんでしたっけ?
>>#キャッシュされるっぽいぞともキャッシュされないよとも、情報が見つからなかったので、
>>#出典があればご教示いただけると幸いです。
>>
> あー、確かに見つからないですね。
> ngen.exe でネイティブコードをこしらえたときと、記憶が混じっていたかも。
>
> もうちょっと探してみますが、一旦撤回させてください。
>
> ----- 以下追加
> このへんをとっかかりに探し中…
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17967&forum=7
>
> ----- さらに追加
> ここによると、
> http://msdn.microsoft.com/ja-jp/library/ht8ecch6.aspx
>
>>より重要な点として、JIT コンパイラが生成したコードは、コンパイルを起動したプロセスにバインドされます。複数のプロセスの間でこれを共有することはできません。
>
> とあるので、キャッシュはされないようですね。どうも失礼しました。

とても参考になりました。

補足説明ありがとうございます。

引用返信 編集キー/
■38815 / inTopicNo.12)  Re[3]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ なちゃ (318回)-(2009/07/25(Sat) 13:37:53)
中さんが書かれてるのは、実行したいアプリケーションそのものに起動してすぐ終了するオプションを付けとくという意味じゃないですかね?
CLRの起動と、アプリケーション自体も一旦起動するので、結局効果的じゃないかと思います。

引用返信 編集キー/
■38816 / inTopicNo.13)  Re[4]: 初回の起動時間が遅いことを解消したい(VB2008SP1)
□投稿者/ 夜桜 (11回)-(2009/07/25(Sat) 13:45:40)
No38815 (なちゃ さん) に返信
> 中さんが書かれてるのは、実行したいアプリケーションそのものに起動してすぐ終了するオプションを付けとくという意味じゃないですかね?
> CLRの起動と、アプリケーション自体も一旦起動するので、結局効果的じゃないかと思います。
>
なちゃさん
ご回答ありがとうございます。

実行したいアプリケーション自体に起動のオプションを用意するということ
だったのですね。
うまく理解できておりませんでした。
ありがとうございます。

CLRがロードされて、アプリケーションも起動することで、
キャッシュされる部分もあるのでしょうから、起動が早くなるということですね。

とても勉強になりました。
ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -