ユーザ用ツール

サイト用ツール


it技術:dotnet

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
it技術:dotnet [2019/03/27 16:50] yajuadminit技術:dotnet [2022/06/23 17:23] (現在) – [Windowsのディレクトリ構成ガイドライン] yajuadmin
行 38: 行 38:
 |なし(配下はある)|%PUBLIC%|C:\Users\Public| |なし(配下はある)|%PUBLIC%|C:\Users\Public|
 |CommonApplicationData|%PROGRAMDATA%|C:\ProgramData| |CommonApplicationData|%PROGRAMDATA%|C:\ProgramData|
 +
 +===== DebugとReleaseの違い =====
 +Releaseの方がコードサイズが小さくなります。\\
 +[[https://qiita.com/ChanyaKushima/items/a9dc549977cd44adb300|C#のDebug/Releaseコンパイルはどう違うの?]]
 +
 +=== Debug ===
 +  * 条件付きコンパイルの定数:DEBUG,TRACE
 +  * コードの最適化:ON
 +  * デバッグ情報:FULL
 +
 +=== Release ===
 +  * 条件付きコンパイルの定数:TRACE
 +  * コードの最適化:OFF
 +  * デバッグ情報:pdb-only
  
 ===== 初回起動が遅い ===== ===== 初回起動が遅い =====
 +「エンド・ユーザーは、0.5秒のフリーズでストレスを感じ、3秒のフリーズはバグだと思う」。昔、冗談半分に言ってみた言葉だが、回りの反応を見るに、割とみな思っていることらしい。\\
 +https://atmarkit.itmedia.co.jp/ait/articles/1109/30/news126.html
 +
 +[[https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/1b743b77-d208-46d2-9fcf-25866384fc5b/netframework1245012503125221246512540124711251912531124342102122238?forum=csharpgeneralja|.NetFrameworkアプリケーションを初回読み込みから速くするには? - MSDNフォーラム]]
 +
 別の.NETアプリケーションが既に動作していれば起動は速いがPC起動時など遅い。\\ 別の.NETアプリケーションが既に動作していれば起動は速いがPC起動時など遅い。\\
 理由は、.NET Framework 自体のロードをファイルシステム・キャッシュ上に乗せるためで「コールド スタート」と呼ばれる、別の.NETアプリケーションが既に動作していると「ウォーム スタート」となる。\\ 理由は、.NET Framework 自体のロードをファイルシステム・キャッシュ上に乗せるためで「コールド スタート」と呼ばれる、別の.NETアプリケーションが既に動作していると「ウォーム スタート」となる。\\
 ウォーム スタートは、主要なCLRコンポーネント用のページの殆どが既にメモリに読み込まれているときに発生し、貴重なディスクアクセス時間が節約されます。このため、マネージ アプリケーションを再度実行すると、初回よりも短い時間で起動します。\\ ウォーム スタートは、主要なCLRコンポーネント用のページの殆どが既にメモリに読み込まれているときに発生し、貴重なディスクアクセス時間が節約されます。このため、マネージ アプリケーションを再度実行すると、初回よりも短い時間で起動します。\\
 [[https://msdn.microsoft.com/ja-jp/library/cc656914(v=vs.110).aspx|アプリケーションの起動時間]] [[https://msdn.microsoft.com/ja-jp/library/cc656914(v=vs.110).aspx|アプリケーションの起動時間]]
 +
 +コールドスタートアップはIOバウンドだから当然ngenでは速くならない。2度目以降の起動時間が短くなるのは、OSが一度読んだブロックをメモリにキャッシュしているから。
  
 起動を速くするににプリコンパイルする「Ngen.exe」を使用する方法がある。インストール時にカスタムアクションでNgen.exeでプリコンパイルするといった手法もある。\\ 起動を速くするににプリコンパイルする「Ngen.exe」を使用する方法がある。インストール時にカスタムアクションでNgen.exeでプリコンパイルするといった手法もある。\\
 [[https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2010/3hwzzhyd(v=vs.100)|チュートリアル : カスタム動作を使用して、インストール中にアセンブリをプリコンパイルする]]\\ [[https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2010/3hwzzhyd(v=vs.100)|チュートリアル : カスタム動作を使用して、インストール中にアセンブリをプリコンパイルする]]\\
 但しプリコンパイルの効果は永続的ではなく、.NET Frameworkなどのバージョンが変わったりなどの条件によって効果が消えてしまう。\\ 但しプリコンパイルの効果は永続的ではなく、.NET Frameworkなどのバージョンが変わったりなどの条件によって効果が消えてしまう。\\
-[[https://msdn.microsoft.com/ja-jp/library/6t9t5wcf(v=vs.90).aspx|ネイティブ イメージ ジェネレータ (Ngen.exe)]]+  * [[https://msdn.microsoft.com/ja-jp/library/6t9t5wcf(v=vs.90).aspx|ネイティブ イメージ ジェネレータ (Ngen.exe)]] 
 +  * [[https://code-examples.net/ja/q/13aa43c|ngen.exeはどのようにいつ動作しますか?]] 
 + 
 +.NET 4.5以降では、NgenがWindowsサービスとして動いている(Auto-Ngen)\\ 
 +基本的に、.NETランタイムは、管理対象アプリケーションの使用ログを生成します。システムがアイドル状態の場合、自動メンテナンスタスクがバックグラウンドで実行され、ネイティブイメージが生成されます。これにより、開発者はNGenを明示的に扱う必要がなくなります。<wrap em>※但し、GACアセンブリのみ</wrap>\\ 
 +※.NET 5以降(旧.NET Core)では、GACの概念は存在しなくなる。\\ 
 +[[https://www.infoq.com/jp/news/2021/02/net-5-breaking-changes-2/|.NET 5の重大な変更点を歴史的テクノロジの面から見る]] 
  
 他にも64bit OS上だとJITのパフォーマンスが悪くなるとの報告がある。x86で作成すると良いらしい。\\ 他にも64bit OS上だとJITのパフォーマンスが悪くなるとの報告がある。x86で作成すると良いらしい。\\
-[[https://karuakun.wordpress.com/2014/02/03/%E3%82%A2%E3%83%97%E3%83%AA%E8%B5%B7%E5%8B%95%E3%81%AB%E9%99%90%E3%82%8C%E3%81%B0%E3%82%AF%E3%82%A2%E3%83%B3%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E4%BB%8A%E3%81%AE%E3%81%A8%E3%81%93%E3%82%8Dx8/|アプリ起動に限ればクアントアプリは今のところx86ターゲットのほうが良いのか?]]+[[https://karuakun.wordpress.com/2014/02/03/%E3%82%A2%E3%83%97%E3%83%AA%E8%B5%B7%E5%8B%95%E3%81%AB%E9%99%90%E3%82%8C%E3%81%B0%E3%82%AF%E3%82%A2%E3%83%B3%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E4%BB%8A%E3%81%AE%E3%81%A8%E3%81%93%E3%82%8Dx8/|アプリ起動に限ればクアントアプリは今のところx86ターゲットのほうが良いのか?]]\\ 
 +※.NET Framework4.6以上の 64ビットモードから.NET環境に最適化されたJITコンパイラ「[[https://www.publickey1.jp/blog/13/net64jitryujit.html|RyuJIT]]」で動作するようになり速くなった。 
 + 
  
 Windows上で電子署名されたロードモジュールを実行すると10秒以上起動にかかることがあるとのことで、対処方法としてアプリケーション構成設定で「generatePublisherEvidence」を「False」に設定する。\\ Windows上で電子署名されたロードモジュールを実行すると10秒以上起動にかかることがあるとのことで、対処方法としてアプリケーション構成設定で「generatePublisherEvidence」を「False」に設定する。\\
行 57: 行 87:
  
 Windows10では「高速スタートアップ」機能があり、パソコンの起動を速くするためシャットダウン時にメモリやCPUなどの状態を保存しておくようになっている。これにより初回の初回起動以外は速くなる。 Windows10では「高速スタートアップ」機能があり、パソコンの起動を速くするためシャットダウン時にメモリやCPUなどの状態を保存しておくようになっている。これにより初回の初回起動以外は速くなる。
 +
 +その他
 +  * [[https://qiita.com/m_hama123/items/f8cb0ddf192099491bc7|.NET Frameworkがアセンブリを検索する順番と確認するためのツール]]
 +  * [[https://qiita.com/mintcandy/items/9d5cfff8748424dc9109|C#のプログラムが遅いときにもしかしたら高速化するかもしれないたった1行のおまじない [STAThread]]]
 +
 +===== アセンブリの厳密名と特定バージョンについて =====
 +==== 厳密名について ====
 +厳密名とはVisual Studioなどでアセンブリファイルの参照プロパティで「厳密な名前」と記載されている項目になります。\\
 +プロパティで「True」となっているアセンブリファイルは厳密名を設定されています。\\
 +基本的にMicrosoftやOracleといった企業が配布しているファイル、バージョンを縛りたい場合に設定されます。
 +
 +=== 厳密名の構成について ===
 +厳密名は以下の4要素によって構成されています。\\
 +^要素名^
 +|ファイル名(拡張子無し)|
 +|バージョン番号|
 +|カルチャID|
 +|公開キートークン|
 +
 +参照URL:\\
 +https://msdn.microsoft.com/ja-jp/library/wd40t7ad(v=vs.110).aspx
 +http://d.hatena.ne.jp/tekk/20110326/1301133863
 +
 ==== 厳密名による特定バージョンの縛りについて ==== ==== 厳密名による特定バージョンの縛りについて ====
 特定バージョンについては厳密名と同じで、アセンブリファイルの参照プロパティで確認できます。\\ 特定バージョンについては厳密名と同じで、アセンブリファイルの参照プロパティで確認できます。\\
行 95: 行 148:
 Setupがゴミ箱にある場合でも、既にインスール済み扱いになってしまうので、対応としてゴミ箱から削除する。 Setupがゴミ箱にある場合でも、既にインスール済み扱いになってしまうので、対応としてゴミ箱から削除する。
  
 +=== Mage.exeによりクリアする方法 ===
 +上よりスマートな方法として、オンライン・キャッシュ領域をクリアする\\
 +[[https://www.atmarkit.co.jp/fdotnet/dotnettips/456cleanonlinecache/cleanonlinecache.html|ClickOnceオンライン・キャッシュ領域をクリアするには?]]
 +<code>
 +Mage -cc
 +</code>
 ==== Chromeでは拡張機能が必要 ==== ==== Chromeでは拡張機能が必要 ====
 ChromeでClickOnceを動作させるには、下記のどちらかの拡張機能が必要となる。 ChromeでClickOnceを動作させるには、下記のどちらかの拡張機能が必要となる。
行 101: 行 160:
   * [[https://chrome.google.com/webstore/detail/windows-remix-clickonce-h/dgpgholdldjjbcmpeckiephjigdpikan|Windows Remix ClickOnce Helper]]   * [[https://chrome.google.com/webstore/detail/windows-remix-clickonce-h/dgpgholdldjjbcmpeckiephjigdpikan|Windows Remix ClickOnce Helper]]
  
 +==== デジタル証明書のタイムスタンプ ====
 +>Done Adding Additional Store
 +>SignTool Error: The specified timestamp server either could not be reached or returned an invalid response.
  
 +"timestamp.globalsign.com/scripts/timstamp.dll"は、もう古い。新しい所有者であるDigiCertは移行させよ。\\
 +https://stackoverflow.com/questions/9714798/http-timestamp-verisign-com-scripts-timstamp-dll-not-available
 +
 +<code>
 +%cur%signtool.exe sign /fd sha256 -f %cur%test.pfx -t http://timestamp.globalsign.com/scripts/timstamp.dll setup.exe
 +                                                                ↓
 +%cur%signtool.exe sign /fd sha256 -f %cur%test.pfx -tr http://timestamp.digicert.com?alg=sha256 setup.exe
 +</code>
 ===== クラッシュする場合 ===== ===== クラッシュする場合 =====
 .NET4.0以降はメモリアクセス違反「AccessViolationException」等になるとアプリケーションが終了する。 .NET4.0以降はメモリアクセス違反「AccessViolationException」等になるとアプリケーションが終了する。
行 130: 行 200:
 https://teratail.com/questions/177835 https://teratail.com/questions/177835
  
 +.NET Framework 3.5が必要な場合、.NETアプリケーション起動時に下記の確認ダイアログ画面が表示される。\\ 
 +{{:it技術:net35インストール確認.png?400|}}
 ===== 高DPI対応 ===== ===== 高DPI対応 =====
 ==== WinForm ==== ==== WinForm ====
行 197: 行 268:
  
 [[http://takachan.hatenablog.com/entry/2016/01/04/211414|C# の static クラスとシングルトン考察]] [[http://takachan.hatenablog.com/entry/2016/01/04/211414|C# の static クラスとシングルトン考察]]
 +
 +==== 複数選択のコンボボックス ====
 +標準のコンボボックスでは複数選択はできない。よってカスタムコントロールを作成しないと実現できない。
 +
 +どちらも C# で作成されている。
 +
 +  * [[https://www.codeproject.com/Articles/21085/CheckBox-ComboBox-Extending-the-ComboBox-Class-and|CheckBox ComboBox Extending the ComboBox Class and Its Items]]
 +  * [[https://www.codeproject.com/Articles/31105/A-ComboBox-with-a-CheckedListBox-as-a-Dropdown|A ComboBox with a CheckedListBox as a Dropdown]]
 +  * [[https://www.codeproject.com/Articles/563862/Multi-Select-ComboBox-in-WPF|Multi Select ComboBox in WPF]]
  
 ==== その他 ==== ==== その他 ====
it技術/dotnet.1553673043.txt.gz · 最終更新: 2019/03/27 16:50 by yajuadmin