- PR -

.NETで作られたアプリの起動のオーバーヘッドってどうなんでしょうか?

投稿者投稿内容
乳牛
常連さん
会議室デビュー日: 2003/04/15
投稿数: 22
投稿日時: 2008-03-23 02:44
最近プログラミングから離れている元Java屋の乳牛と申します。
.NET系はまったく初めてです。

久々に何かプログラミングをしてみようと意気込んで、ローカルファイルのブックマークアプリみたいなのを考えています。ファイルやフォルダを右クリックして”送る”とブックマークされるようなものです。(”お気に入り”ではなくSqliteにブックマーク情報を溜め込んで、ごちゃごちゃやろうと考えています)

この形式だと”送る”のタイミングで毎回アプリが起動されることになると思うのですが、ここで.NETの場合の起動速度を気にしています。
元Java屋なのでCLRをJavaVMと同様なものとして認識しているのですが、CLRはOSの一部みたいなものなのでJavaVMのようにVM起動のオーバヘッドが大きい…ということはないのでしょうか?

参考になるページなどがありましたら教えてください。
よろしくお願いします。

#そんなに気になるならVC++で書けと言う話もあるのですが、ブックマークの
#メタ情報入力のフォームを表示したくて、フォームのコードをMFCで書くより
#C#の方が簡単そうだな…という判断です。
#単にC#を使ってみたいと言うのもあります。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2008-03-23 09:34
> .NETで作られたアプリの起動のオーバーヘッドってどうなんでしょうか?

以前webで調べたときのキーワードだけ。
実際に検証していないので。間違っているかもしれません。

・CLRの起動
XPまではexe実行時に起動する。VistaからはOS側で起動済みになる。

・MSILのコンパイル
JITコンパイラを使うか、NGen.exeで事前にコンパイルしておくか。

・アプリケーションの起動
http://msdn2.microsoft.com/ja-jp/magazine/cc337892.aspx



> ローカルファイルのブックマークアプリ
ランチャーみたいなイメージだとすると、大人しく常駐アプリにしておいた方が無難だと思います。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-03-23 09:40
引用:

”送る”のタイミングで毎回アプリが起動される



とは限りません。Shell Extension にするという手もあります。

その場合、ファイル形式としては .dll になり、explorer.exe にアタッチされて動作することになります。
Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2008-03-23 12:30
引用:

渋木宏明(ひどり)さんの書き込み (2008-03-23 09:40) より:
引用:

”送る”のタイミングで毎回アプリが起動される


とは限りません。Shell Extension にするという手もあります。


これをマネージコードで書いてはいけません。
http://blogs.msdn.com/oldnewthing/archive/2006/12/18/1317290.aspx

参考
http://blogs.wankuma.com/shannon/archive/2007/01/06/54837.aspx
Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2008-03-23 12:52
引用:

・CLRの起動
XPまではexe実行時に起動する。VistaからはOS側で起動済みになる。


VistaとCLRを組み合わせて検索したのですが、それらしい情報に当たりませんでした。
すみませんが、情報源頂けないでしょうか。

SuperFetchなるもので使いそうなファイルは事前に読み込まれる可能性があるというのは読みましたが、「起動済み」というものとは違うと判断しました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-03-23 13:42
引用:

引用:

・CLRの起動
XPまではexe実行時に起動する。VistaからはOS側で起動済みになる。


VistaとCLRを組み合わせて検索したのですが、それらしい情報に当たりませんでした。



僕も聞いたことがないな。

CLR は簡単に言えば .dll の集合で、各プロセス空間に個別に読み込まれて「ユーザプログラムの下請け」的に実行されるもの(故に、1個前の投稿のような問題が発生し得る)なので、OS 起動時に何を起動するって話なんだろ?

.NET 2.0 以降は GAC に登録されたアセンブリを JIT してまわるサービスが追加されてますが、これのことを言っってるのかな?

あるいは、「OSにデフォルトで .NET ランタイムがインストールされている」のを取り違えているのか。

引用:

SuperFetchなるもので



それは .NET とはまた別の話ですね。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-03-23 13:47
引用:

これをマネージコードで書いてはいけません。
http://blogs.msdn.com/oldnewthing/archive/2006/12/18/1317290.aspx



Office や IE は最新のランタイムだけを使ってくれるんだけどねぇ。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2008-03-23 18:02
引用:

・CLRの起動
XPまではexe実行時に起動する。VistaからはOS側で起動済みになる。

引用:

.NET 2.0 以降は GAC に登録されたアセンブリを JIT してまわるサービスが追加されてますが、これのことを言っってるのかな?

あるいは、「OSにデフォルトで .NET ランタイムがインストールされている」のを取り違えているのか。





すみません。出所不明です。「CLRの起動」は間違いかもしれません。
「初回起動を高速化する何か」がVista以降だと読んだ記憶がありました。

それとブログにキーワードが載っていましたので参考までに。
http://blog.yaju.jp/200703/article_6.html
http://weblogs.asp.net/scottgu/archive/2008/02/19/net-3-5-client-product-roadmap.aspx

スキルアップ/キャリアアップ(JOB@IT)