HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2019/10/20

世にも奇妙な C# .NETランタイムの糞な挙動の話 世にも奇妙な C# .NETランタイムの糞な挙動の話

(本当は恐ろしい Microsoft .NET C#のランタイムがバグバグで糞過ぎる件)

Tags: [Windows], [無人インストール]




● 本当は恐ろしい Microsoft .NET C#が糞過ぎる話

 C#の言語仕様が糞と言う意味ではなく .NETランタイム側の内部処理が糞と言う意味です。


● ClipBoardで GetImage()する度にメモリリークする

 GCを行なわないと GetImage()する度にメモリを無制限に確保します。
 明示的に GCを行なう事でメモリを解放してメモリリークを回避できます。

 GetData(DataFormats.Bitmap)でも同様に発生します。

    // .NET Framework 2.0以降
    // クリップボードにある画像データの取得
    if (Clipboard.ContainsImage())
    {
        Image img = Clipboard.GetImage();

        // メモリリークする

        // Image imgを処理する

 対策方法
        // 明示的に GCを行なう事でメモリを解放する
        GC.Collect();
    }
    // .NET Framework 2.0よりも前
    // クリップボードにある画像データの取得
    IDataObject data = Clipboard.GetDataObject();
    if (data != null)
    {
        // ビットマップ形式を取得
        Image img = (Image)data.GetData(DataFormats.Bitmap);

        // メモリリークする

        // Image imgを処理する

 対策方法
        // 明示的に GCを行なう事でメモリを解放する
        GC.Collect();
    }


● Bitmapのファイル読み込みでファイルをロックしたままになる

    string bitmapFileName = "C:\hoge.png";
    Bitmap image = new Bitmap(bitmapFileName);
    // "C:\hoge.png"ファイルをロックしたままになる
    // ロックしたままなのでファイルの削除等ができない

    // pictureBoxに設定する場合は新規に new Bitmapをする
    // そのまま imageを設定して image.Dispose()すると死ぬ
    pictureBox1.Image = new Bitmap(image);

 対策方法
    // 明示的に Disposeを行なう事でファイルのロック状態が解除される
    image.Dispose();


● Windows 7では OTFフォントが読み込めない

 対策方法
 その1: Windows 7では OTFフォントが読めません。諦める。
 その2: OTFフォントを TTFフォントに変換する。


2018/07/21
FontForgeで OTF形式のフォントファイルを TTF形式に変換する方法、日本語にも対応版の変換手順
FontForgeで OTF形式のフォントファイルを TTF形式に変換する方法、日本語にも対応版の変換手順

  FontForge フリーソフトを使用して日本語の OpenType形式のフォントファイルを TrueType形式に変換する方法


● Windows 7では .NETのバージョンが古いと TTFファイルの読み込みに失敗する

 .NET 4.5で AddFontFileの TTFファイルの読み込みに失敗する。
 .NET 4.6では AddFontFileの TTFファイルの読み込みに成功する。
 .NETの糞バグ。

 対策方法
 .NETを最新に更新する。

    System.Drawing.Text.PrivateFontCollection pfc =
        new System.Drawing.Text.PrivateFontCollection();
    pfc.AddFontFile(fontFileName);
    FontFamily ff = pfc.Families[0];

    float fontSize = 23.45f;
    FontStyle fs = FontStyle.Regular;
    Font font = new Font(ff, fontSize, fs);
    System.Drawing.Text.InstalledFontCollection ifc =
        new System.Drawing.Text.InstalledFontCollection();
    FontFamily[] ffs = ifc.Families;

    foreach (FontFamily ff in ffs)
    {
        String fontName = ff.Name;

        if (ff.IsStyleAvailable(FontStyle.Regular))
        {
        }
    }

    FontFamily ff = new FontFamily(fontName);

    Graphics g = Graphics.FromImage(canvas);

    // アンチエイリアス
    g.SmoothingMode = SmoothingMode.AntiAlias;
    // 無し
    g.SmoothingMode = SmoothingMode.None;



Tags: [Windows], [無人インストール]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

【2023年対応】 Microsoft Visual C++ ランタイムライブラリ 再頒布可能パッケージのまとめ 2005~2022まで
【2023年対応】 Microsoft Visual C++ ランタイムライブラリ 再頒布可能パッケージのまとめ 2005~2022まで

  Microsoft Visual C++ 2005、2008、2010、2012、2013、2015、2017、2019、2022の各バージョンの最新版 MSVC Runtime librariesのまとめ

Visual Studioの C#で開発した .Netアプリの難読化をする方法
Visual Studioの C#で開発した .Netアプリの難読化をする方法

  C#で開発した .Netアプリの難読化は必須事項です、素の状態では簡単に内部を解析されます

Visual Studioの C#で開発した .Netアプリを逆コンパイルして、中身の実装を覗き見る方法
Visual Studioの C#で開発した .Netアプリを逆コンパイルして、中身の実装を覗き見る方法

  C#で開発した .Netアプリは比較的簡単に元のソースコードに戻せます

Visual Studio 2019 Professional v16.4を無人インストールする方法、完全自動でインストール
Visual Studio 2019 Professional v16.4を無人インストールする方法、完全自動でインストール

  VS2019 v16.4を完全オフラインインストール&コンポーネント選択の事前設定で自動インストールする

Visual Studio 2017 Professional 15.9を無人インストールする方法、完全自動でインストール
Visual Studio 2017 Professional 15.9を無人インストールする方法、完全自動でインストール

  VS2017を完全オフラインインストール&コンポーネント選択の事前設定で自動インストールする

Visual Studio 2015 Professionalを無人インストールする方法、完全自動でインストール
Visual Studio 2015 Professionalを無人インストールする方法、完全自動でインストール

  VS2015を Update 3適用済みとコンポーネント選択の事前設定でインストール時の手間を省く

Visual Studio 2013 Professionalを無人インストールする方法、完全自動でインストール
Visual Studio 2013 Professionalを無人インストールする方法、完全自動でインストール

  VS2013を Update 5適用済みとコンポーネント選択の事前設定でインストール時の手間を省く

Visual Studio 2005 Professionalに Service Pack 1を統合して無人インストールする方法
Visual Studio 2005 Professionalに Service Pack 1を統合して無人インストールする方法

  VS2005に SP1を統合 & 完全自動でインストール、SP1の適用とコンポーネントの事前設定でインストールの手間を省く

Visual Studio 98を Windows 10 1903にインストールする方法
Visual Studio 98を Windows 10 1903にインストールする方法

  VS98 Visual Studio 98を Windows 10 19H1にインストールする方法

Visual Studio Communityのまとめ Professional と同等機能が無償
Visual Studio Communityのまとめ Professional と同等機能が無償

  Visual Studio Communityの 2013 Update 5、2015 Update 3、2017 version 15.6のまとめ

C# .NETで ZIPファイル解凍ツール UnZipをソースリスト 1行で自作する方法、Windows .NET専用
C# .NETで ZIPファイル解凍ツール UnZipをソースリスト 1行で自作する方法、Windows .NET専用

  Visual Studio 2013の C# .NET 4.5で ZipFile.ExtractToDirectoryを使い、UnZip解凍ツールを作成

Visual Studio 2013に Windows 10 SDK + UwpDesktopで UWPの機能を素の Windowsアプリから使用
Visual Studio 2013に Windows 10 SDK + UwpDesktopで UWPの機能を素の Windowsアプリから使用

  VS2013に Win 10 SDKをインストールして Uwp Desktopで UWPの機能を従来の Windowsアプリで動かす

Visual Studio 2013の C# .NETで 日本語対応の OCR文字認識アプリを自作する方法
Visual Studio 2013の C# .NETで 日本語対応の OCR文字認識アプリを自作する方法

  オフライン環境で動作可能な 世界各国語対応の OCR文字認識アプリを C# .NETで作成、MS製 OCRライブラリを使用

Visual Studio 2013の C#で日本語対応の手書き文字認識アプリを自作する方法
Visual Studio 2013の C#で日本語対応の手書き文字認識アプリを自作する方法

  オフライン環境で動作する世界各国語対応の手書き文字認識アプリを作成、MS製 手書き認識ライブラリを使用

Open XML SDKを使用して Officeのファイルを C#で自在に操る方法
Open XML SDKを使用して Officeのファイルを C#で自在に操る方法

  Microsoft Officeのファイルをプログラムで生成したり直接中身の読み取りができます

Visual Studioの各バージョンと開発できる .NET Frameworkの各バージョンのまとめ
Visual Studioの各バージョンと開発できる .NET Frameworkの各バージョンのまとめ

  .Microsoft.NET Framework Developer Packの各バージョンのダウンロードまとめ。言語パック等

Windows 10対応 Microsoft Speech使用の音声認識アプリ
Windows 10対応 Microsoft Speech使用の音声認識アプリ

  SpeechRecognizeApp 音声認識エンジンを使用してマイク入力の音声を認識します

Windows 10の音声合成エンジンを使用して入力した文字列を喋る & Waveファイル書き出し
Windows 10の音声合成エンジンを使用して入力した文字列を喋る & Waveファイル書き出し

  SpeechApp Windows 10用 Speech 音声合成 Text-to-Speech TTSのアプリ

Visual Studioの C#や MFC C++用のサンプルアプリのリンク集
Visual Studioの C#や MFC C++用のサンプルアプリのリンク集

  Visual Studioの C#や MFC C++でアプリを作る時の参考資料として

Windowsの Input Method Manager IMEや TSF Text Services Frameworkの公式情報源のまとめ
Windowsの Input Method Manager IMEや TSF Text Services Frameworkの公式情報源のまとめ

  Windowsで IME Input Method Manager関連のアプリを作成する時の情報 ImeTrayもこの辺を必死に読んだ

Microsoft Office 2016を無人インストール(自動インストール)する方法
Microsoft Office 2016を無人インストール(自動インストール)する方法

  インストールするコンポーネントを事前に設定する事で同一環境の構築が楽にできます MSオフィス 2016

Windows 10を全自動で最後まで手間要らずでインストールする方法
Windows 10を全自動で最後まで手間要らずでインストールする方法

  autounattend.xmlの応答ファイルを使用して Windows 10を無人インストールする。大量展開時に便利

Adobe Acrobat Reader関係のまとめ 2018年版、自動インストール、無人インストール方法
Adobe Acrobat Reader関係のまとめ 2018年版、自動インストール、無人インストール方法

  アップデート手順など、Adobe Reader XI、X、Acrobat Reader 9、Acrobat Reader 8




[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2019 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/software/visual_c_sharp_dot_net_strange_bug/