.NET Framework 4.8 から .NET 7/8 への移行で直面した課題と、移行を見送るべき理由

最近、システムを .NET Framework 4.8 から .NET 7/8 に移行しようとしたのですが、いくつかの大きな課題に直面しました。新しい言語機能を活用し、モダンな環境へ移行することには魅力がありましたが、特に Windows Forms アプリケーションの移行に関しては「まだ時期尚早」という結論に至ったので、その経緯を共有します。

現状:ClickOnce 配布と遺産プロジェクト

私のシステムには、複数の内部プロジェクトが統合されたソリューションがあり、クライアントへのアプリ配布には長年 ClickOnce を使用してきました。この中には、15年ほど前に作成した VB プロジェクト(いわゆる技術的負債)も含まれており、その保守が今でも必要です。

移行に伴う課題

移行には、いくつかの技術的なハードルがありました。以下が主なものです:

  1. データベース接続ライブラリの問題
    これまで System.Data.SqlClient を使用してきましたが、新しい .NET への移行に際して、これを再構成する必要がありました。また、独自の TableAdapterTransaction クラスを利用しているため、これも新環境に適応させるのが課題でした。
  2. VB プロジェクトから C# への変換
    長い間 VB で書かれていたプロジェクトを C# に変換する必要がありました。古いコードは移行作業で不具合が発生しやすく、これが大きな作業負担となりました。
  3. ClickOnce の互換性
    SDK スタイルプロジェクトに変換すると、.NET Framework 上では ClickOnce が使えなくなるという問題が発生しました。これに対処するため、.NET 7/8 に移行した後の対応が必要となり、その点も時間と労力がかかりました。
  4. ClickOnce ライブラリの挙動が異なる
    .NET 7/8 への移行後も、ClickOnce の挙動が従来と異なり、配布に関する細かい調整が必要でした。

最大の問題:パフォーマンスの劣化

これらの技術的な課題をなんとか乗り越えたとしても、最終的に一番の問題となったのが「パフォーマンスの劣化」です。

具体例:大量データの読み込み処理での違い

例えば、500列×2万行(約150MB)のCSVファイルを読み込んで処理を行うプログラムをアップデートした際に、.NET Framework 4.8 ではメモリ消費が約1.5GBだったのに対し、.NET 8 では4GBにも達してしまいました。

さらに、DataGridView で全選択を行う操作において、.NET 8 では数秒間の無反応状態が発生。おそらく、大量のメモリ消費によりガベージコレクション(GC)が頻繁に発生しているため、アプリ全体のパフォーマンスが著しく低下していました。また、途中から処理が急に遅くなることもあり、これも大きな問題です。

なぜ移行は慎重にすべきか?

新しい .NET への移行は、確かに多くのメリットがあります。最新の言語機能や、今後のサポートを考えれば移行は避けられないと思っていました。しかし、今回の一連の作業で分かったのは、現時点では、特に Windows Forms アプリケーションに関しては、パフォーマンスや最適化がまだ不十分だということです。

  • Windows 関連のコントロールが最適化されていない
    DataGridView や DataTable のような Windows Forms の主要コントロールが、まだ新しい .NET に十分適応していないと感じました。
  • メモリ使用量の増加
    プロジェクトによっては、メモリの使用量が著しく増加し、パフォーマンスにも悪影響を及ぼしています。
  • AIアシスタントの提案もまだ古い
    Copilot などのAIツールの提案も、まだ .NET Framework に依存したものが多く、完全に新しい環境に最適化された提案が得られていません。

結論:移行は2030年まで待つべきか?

これらの問題を総合的に考えると、.NET Framework からの移行は急がない方が良いのではないかと感じています。特に Windows Forms アプリケーションを多く抱えている場合、.NET 8 への移行はまだ時期尚早かもしれません。パフォーマンスや互換性の問題が解決されるまで、現行の .NET Framework 4.8 を利用し続ける方が安定して運用できると考えています。

2030年までサポートされているので、しばらくは .NET Framework 4.8 を使い続け、より最適化されたタイミングで移行を検討しても遅くはないでしょう。


“.NET Framework 4.8 から .NET 7/8 への移行で直面した課題と、移行を見送るべき理由” への2件のフィードバック

  1. こーじのアバター
    こーじ

    とても興味深い記事ありがとうございます。私の会社でも、7年前から開発を始めたVB.NETとdotNetFramework4.Xの基幹システムがあり、いまだに機能拡張を行っております。

    OSサポートやセキュリティを考えると、.Net8等へのバージョンアップがいつか必要と考えていますが、今後VB.NETの機能拡張が無いことと、SpreadやInputMan等のミドルウェアのバージョンアップも必要で、どのような順番で行うか非常に悩んでおります。

    .Net7/8はWindows Formsのパフォーマンスが向上しているとネットの記事で見たことがありますが、今回の記事でパフォーマンスに懸念がありえることを知り、大変参考になります。

    ChatGPT等に相談しても、
    「①Spread等のバージョンアップ、②フレームワークのバージョンアップ、③言語の切り替え」
    を推奨されましたが、Windows Serer 2025のリリースで、dotNetFramework4.8も2034年までサポートされそうなこともあり、
    「①Spread等のバージョンアップ、②言語の切り替えを2030年頃までに行い、③フレームワークの切り替えを30年以降に行う」のが良いのかなと思いました。
    (その頃は.Net12/14?でパフォーマンスが改善されていると嬉しい)

    1. adminのアバター
      admin

      こーじさん
      始めまして、このブログ全然更新していないのに
      コメントありがとうございました。

      同じような悩みを持つ方の参考になってよかったです。
      今後このようなレガシーのシステムを改修する際は
      AIとの協業が必要不可欠になりますね、

      ひとまず、VB.NETライブラリの依存排除は行ったほうが良いかと思います
      ※色々とコケる為

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

About Me

Nobody knows

Featured Posts