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

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

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

Re[6]: C#コンパイラの速度


(過去ログ 51 を表示中)

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

■27964 / inTopicNo.1)  C#コンパイラの速度
  
□投稿者/ .SHO (71回)-(2008/11/18(Tue) 10:43:03)

分類:[雑談] 

C# は obj ファイルを作らずにソースから直接 exe ファイルを作りだすので
ソースが多くなれば、それなりに処理に時間がかかりそうな気がするのですが
凄い速さでコンパイルしてしまいます。

これってどういう仕組みになってるのでしょうか?

引用返信 編集キー/
■27966 / inTopicNo.2)  Re[1]: C#コンパイラの速度
□投稿者/ 渋木宏明(ひどり) (950回)-(2008/11/18(Tue) 11:03:19)
渋木宏明(ひどり) さんの Web サイト
> 凄い速さでコンパイルしてしまいます。

何との比較でしょう?
C/C++ 系ってことでいいんでしょうか?

だと、#include とメタデータの違いによる差が大きいような気がします。
引用返信 編集キー/
■27968 / inTopicNo.3)  Re[2]: C#コンパイラの速度
□投稿者/ .SHO (72回)-(2008/11/18(Tue) 11:19:11)
No27966 (渋木宏明(ひどり) さん) に返信

> 何との比較でしょう?

感覚…とか言ったら怒られますね^^;

たとえばPCの電源投入後最初の1回はそれなりに処理に時間がかかります。
感覚的にはそれぐらいの処理時間がかかって当然という時間です。

しかし、その後のコンパイルは一瞬で終わってしまいます。
もちろんソースファイルは変更してます。

最初は、たんにファイルのキャッシュが効いてるだけなのかな?と
思っていたのですが、それにしても速いです。
引用返信 編集キー/
■28017 / inTopicNo.4)  Re[3]: C#コンパイラの速度
□投稿者/ .SHO (86回)-(2008/11/18(Tue) 19:57:57)
こんな実験してみました↓

まずなんでもいいのでC#プログラムをコンパイルし
作成されたEXEのプロパティで作成日時を確認します。

そのEXEを削除し(念の為ごみ箱からも完全に削除)
先に確認した日時からシステム時刻が変わったら
再度コンパイルします。

再度作成されたEXEのプロパティで作成日時を確認すると
削除したはずの前のEXEの作成日時になってます。

この挙動を見ると、何かコンパイラが特殊なことを
しているんじゃないかと思ったわけです。
引用返信 編集キー/
■28019 / inTopicNo.5)  Re[4]: C#コンパイラの速度
□投稿者/ なちゃ (204回)-(2008/11/18(Tue) 21:20:51)
そんなことなかったと思うけどな…
objフォルダに残ってたとかそういう話じゃなくて?

引用返信 編集キー/
■28020 / inTopicNo.6)  Re[5]: C#コンパイラの速度
□投稿者/ .SHO (87回)-(2008/11/18(Tue) 21:24:45)
No28019 (なちゃ さん) に返信

> そんなことなかったと思うけどな…
> objフォルダに残ってたとかそういう話じゃなくて?

IDE使ってないので obj フォルダが存在してないです。
実際に今やってみても再現します。

引用返信 編集キー/
■28021 / inTopicNo.7)  Re[6]: C#コンパイラの速度
□投稿者/ .SHO (88回)-(2008/11/18(Tue) 21:26:53)
No28020 (.SHO さん) に返信

ちなみに必ず再現するわけではなく
どんなタイミングなのかはわからないのですが
作成日時がきちんと変更される場合もあります。

でも、2、3回同じ事を繰り返せばすぐに再現します。
引用返信 編集キー/
■28028 / inTopicNo.8)  Re[6]: C#コンパイラの速度
□投稿者/ みきぬ (228回)-(2008/11/19(Wed) 01:06:31)
No28020 (.SHO さん) に返信
> IDE使ってないので obj フォルダが存在してないです。
>
obj フォルダが見つからないだけで、どこか別の場所(TEMP フォルダとか)に存在するのだと予想してみた。

# でないと、コンパイラはどうやってビルドしてるの? というお話になっちゃうので
引用返信 編集キー/
■28031 / inTopicNo.9)  Re[4]: C#コンパイラの速度
□投稿者/ NyaRuRu (71回)-(2008/11/19(Wed) 01:27:51)
No28017 (.SHO さん) に返信
> まずなんでもいいのでC#プログラムをコンパイルし
> 作成されたEXEのプロパティで作成日時を確認します。
>
> そのEXEを削除し(念の為ごみ箱からも完全に削除)
> 先に確認した日時からシステム時刻が変わったら
> 再度コンパイルします。
>
> 再度作成されたEXEのプロパティで作成日時を確認すると
> 削除したはずの前のEXEの作成日時になってます。

作成日時が元に戻るというのはコンパイラは関係なくて,このせいじゃないですかね?
http://blogs.msdn.com/oldnewthing/archive/2005/07/15/439261.aspx

引用返信 編集キー/
■28039 / inTopicNo.10)  Re[7]: C#コンパイラの速度
□投稿者/ .SHO (89回)-(2008/11/19(Wed) 09:57:31)
No28028 (みきぬ さん) に返信

> obj フォルダが見つからないだけで、どこか別の場所(TEMP フォルダとか)に存在するのだと予想してみた。

それは考えにくいけど、私も一応可能性はあるとして
ディスクの中全てを検索したのですが存在しませんでした。
まぁ、名前変えて保存されてたら見つかりませんが…
引用返信 編集キー/
■28040 / inTopicNo.11)  Re[5]: C#コンパイラの速度
□投稿者/ .SHO (90回)-(2008/11/19(Wed) 10:02:41)
No28031 (NyaRuRu さん) に返信

> 作成日時が元に戻るというのはコンパイラは関係なくて,このせいじゃないですかね?
> http://blogs.msdn.com/oldnewthing/archive/2005/07/15/439261.aspx

ありがとうございます!

そうなんですね。。。
削除しても、 quarksとか言うところに保存されてるのか。
しかもWindow95の頃からtunnelingされてたなんて…知りませんでした。
勉強になりました!!

ってことは、これはコンパイラの速度には関係ないですね。
これだとCでもC++でも同じことが起きてるはずだし。
引用返信 編集キー/
■28041 / inTopicNo.12)  Re[6]: C#コンパイラの速度
□投稿者/ .SHO (91回)-(2008/11/19(Wed) 10:11:13)
> これだとCでもC++でも同じことが起きてるはずだし。

Cコンパイラで実験してみましたが同じ現象が再現できました。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -