- PR -

[C#] 状況に応じてコンパイルのタイミングを細かく制御したい

投稿者投稿内容
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-09-07 13:31
諸農です。

かなりディープな話題だなぁと思っていたんですが。。

引用:

コード:


***************************************************
// 下記のディクショナリから値を取り出す方法が分からない
// ****************************************************
string Args = this.Context.Parameters.Item("Args");






StringDictionaryのインデクサではないんですか?
製造物の品質、開発生産性を追及していると断言している割には、
コーディングレベルがお粗末なのでは、と感じます。

--追加--
製造物の応答性能にも気を遣っているといわれていますが、
コレクションのインデクサアクセスなんかは考慮に入っているんですか?
どこまでの検証をしているのか、少し怪しく思います。
--追加終わり--


_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2004-09-07 13:34 ]
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-09-09 12:41
引用:

ひろしさんの書き込み (2004-09-06 09:44) より:

製造ラインでリアルタイム制御に使用するプログラムなので
通常のビジネスアプリケーション以上に応答性能の安定性に神経を使います。


ということなら、マネージドなコードでプログラムを作成しようと
いうこと自体に問題があると思います。

引用:

応答性能だけを考えるならC++を採用するという選択肢もあると思いますが、
開発生産性、信頼性のことも総合的に考えると、
C#で済ませられるならそれに越したことは無いと実感しています。


GCって言葉ご存知ですか?
そしてGCがどんなものか理解できてますか?
起動時のことしか考えてないみたいですけど、実行中にGCが
自動的に動作しますが。。。

ということで、すなおにC++で作成されることをおすすめします。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2004-09-11 14:33
応答性能を改善する目標で引き続き、ngen.exeを試しています。

Q1.下記の手動操作は正しいでしょうか?
Q2.アセンブリについての理解が不十分です。
   ネイティブイメージのキャッシュについて教えてください。
   実体どこに置かれているのでしょうか?メモリ上ですか?
   それともキャッシュファイルがあるのでしょうか?
   また、どれだけの期間有効なのでしょうか?
   つまり、Windowsを再起動しなければずっと有効なのでしょうか?
   
★事前準備
(1) コマンドプロンプト画面を開く
(2) AssemblyInfo.csのAssemblyKeyFileに"mykey.snk"と記述する
(3) mykey.snkの生成
"C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\"sn.exe -k C:\test\mykey.snkをAssemblyInfo.csと同じディレクトリにコピーする。
(4) ソリューションをReleaseモードでビルドする
(5) ngen.exeでネイティブイメージをネイティブイメージキャッシュに作成する
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\ngen.exe WindowsApplication1.exe
(6) コマンドプロンプト画面を閉じる
-------------------------------------------
★ターゲットアプリケーションの起動(毎回)
(7) WindowsデスクトップからWindowsApplication1.exeのショートカットを
クリックする。(起動時間および応答性能が改善されているはず)
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-09-11 15:19
引用:

ひろしさんの書き込み (2004-09-11 14:33) より:
Q1.下記の手動操作は正しいでしょうか?


良く分かりませんが、「ネイティブイメージを作成する」というだけの目的に関しては、ビルド後にngen.exeを実行するだけでは?
細かいところはツールのマニュアルを読むしかないでしょう。
引用:

Q2.アセンブリについての理解が不十分です。
   ネイティブイメージのキャッシュについて教えてください。
   実体どこに置かれているのでしょうか?メモリ上ですか?
   それともキャッシュファイルがあるのでしょうか?
   また、どれだけの期間有効なのでしょうか?
   つまり、Windowsを再起動しなければずっと有効なのでしょうか?


「ネイティブ イメージ ジェネレータは、マネージ アセンブリからネイティブ イメージを作成し、そのイメージをローカル コンピュータ上のネイティブ イメージ キャッシュにインストールします。ネイティブ イメージ キャッシュはグローバル アセンブリ キャッシュの予約済み領域です。」
だそうです。
まあ、少なくともngen.exeをインストール時に実行するとかって話が出てくるんですから、メモリ上のみとか、再起動すると無効と言う事はないはずですよね。

ぱっと読んでみた感じでは、特に期限とかの話もなさそうですし、特別な事がない限り(対象となるアセンブリで)一回実行したらずっと有効でしょう。
ngen.exe /show
とかやればイメージの一覧が出るので、実際にできているかは確認できます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-12 12:11
 小野さんの、
引用:

GCって言葉ご存知ですか?
そしてGCがどんなものか理解できてますか?
起動時のことしか考えてないみたいですけど、実行中にGCが
自動的に動作しますが。。。


を、よ〜〜く、吟味することを薦めます。

 結局マネージコード、つまりメモリ使用を管理されているコードなので、ガベージコレクタが走ると、その間実行が停止します。これはいつ走るか、制御できません。また、テスト中にその状態が発生することも、あまり期待できません。完全なブラックボックスだからです。したがって、一番応答性が欲しいときに止まってしまう可能性があります。ネイティブコードに変換していても、マネージドコードであることに変わりはありません。
・・・それでいいのですか?

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