ソフトウェア性能改善サービス

負荷を減らすだけでなく、最新のプラットフォームの能力を引き出す
性能改善を提供いたします

ハードウェアの高性能化や、クラウドコンピューティングやオープンソースの普及とも相まって、近年の開発プラットフォームの高機能化・高性能化には驚くべきものがあります。

しかし開発プラットフォームの機能や特性を理解せずに「動けばいい」という実装がされた結果、機能仕様通りに動いてはいるものの、実用に耐えられないほど低い性能しか出ていない、という事例も多々見受けられます。

当社には、様々な言語やプラットフォームでの開発経験を有するエンジニアが在籍しておりますので、プラットフォームの能力を最大限に引き出すことが可能です。

サービス概要

当社の定評あるリファクタリングサービスを含む ソフトウェア改良の各段階において、最新の業界標準技術に則った改善を行い、 筋肉質のソフトウェアに仕上げます。
当社には、様々な言語、プラットフォームに 対応可能なエンジニアが在籍しています。 サービス概要

エイムネクストの性能改善技術

ボトルネックの特定

  • プロファイラによるコード実行時間の分析、処理時間計測用コードの埋め込み、通信データ量の計測などを行い、ボトルネックになっている機能やモジュールを特定します。

リファクタリングによる単純化

  • コードの複雑度とモジュールの結合度を下げます。
  • 無駄な変数を削減して、コードを単純化するとともに、ミスキャッシュを減らします。

プラットフォームに適したアルゴリズムの改善

  • 遅延読込・遅延実行を実装し、不要な処理を行わないようにします。
  • データベースやWeb APIサーバーとの通信がボトルネックになっている場合は、通信量を削減します。
    • ASP.NET Coreの事例
      ASP.NET Coreで実装されたページの表示に数十秒かかっていた事例にて、数十MBのデータ転送が行われていたことを発見し、ページ表示に必要な最小限のデータのみをバインディングするようにしました。
    • Entity Frameworkの事例
      LINQ to Entityのクエリの内容を見直して、SQL Serverから取得するデータを削減しました。
      ループ内で実行されていたクエリをJoinに置き換えてループを解消し、1回のクエリで必要なデータを取得するようにしました。
  • 探索する母集団が大きいにもかかわらず線形探索が行われている場合は、Binary-Treeやハッシュテーブルを使用した探索に置き換えます。
    • C#の事例
      探索する母集団が大きかったり、ループ内であるため探索の実行回数が多いにもかかわらず、LINQのWhere式による線形探索が行われている箇所を、SortedSetやDictionaryによる探索に置き換えました。(20倍以上高速化した事例があります)

低水準言語や特殊実装による最適化

  • Blazorに最適化したJSONパーサーを実装し、汎用のJSONライブラリであるJSON.NETに比べて200倍の処理速度を実現しました。
  • Entity Frameworkで逐次更新していた処理をADO.NETのテーブル転送に置き換えて、60倍以上の高速化を実現しました。
  • C#で記述された.NETコンポーネントを、C++とATLで記述されたCOMコンポーネントで書き直しました。 (起動時間を10分の1以下に短縮した事例があります)
  • C++で記述された関数を、SSE命令を用いたインラインアセンブラで最適化しました。 (25%以上の速度向上を達成した事例があります)

関連リンク