

WinForms チャート比較の多くは、誤った前提から始まります: WinForms は WPF のレガシーで遅い兄弟であり、本格的な大規模データ チャートは WPF でやるべきだ、と。ProEssentials では逆が真です。WinForms インターフェイスは Direct3D をウィンドウのデバイスコンテキスト(hDC)へ直接結び付け、WPF が構造的に必要とする render-to-texture と D3DImage コンポジターの中継をバイパスします — 当社のテストでは、これによりネイティブ WinForms パスは、まったく同じエンジンで WPF コントロールを駆動する場合よりエンドツーエンドで約5%高速です。
このページではその理由を説明し、開発者が実際に評価する8つのチャート選択肢の WinForms レンダリング アーキテクチャを比較し、再現可能なクローンしてすぐ動く4つのデモを示します — このページのすべての主張は、信じるのではなく検証できます。要点はシンプルです: WinForms 上で、ProEssentials は1億のロスレス ポイントを約15ミリ秒で、データ複製ゼロでレンダリングします。しかも、アーキテクチャ上それが最速となるインターフェイスの上で。
このページのすべての数字をご自身で再現してください。4つの WinForms デモ、クローンして F5 を押すだけ:

WPF で GPU レンダリングするすべてのチャートライブラリは、避けられないアーキテクチャ上の税を払います。WPF は独自のコンポジション エンジン(Media Integration Layer)を通じて画面を所有します。ネイティブ ウィンドウのように、コントロールが Direct3D を画面へ直接描くことはできません — それらのピクセルは WPF のコンポジターのものだからです。GPU コンテンツを注入するには、ライブラリは Direct3D シーンをオフスクリーン テクスチャへレンダリングし、そのテクスチャを D3DImage(または新しいコンポジション相互運用)経由で WPF に渡し、次のコンポジター ティックで WPF のコンポジターにビジュアルツリーへ合成させなければなりません。
この往復はタダではありません。完成した GPU フレームは共有サーフェスへコピーされ、Direct3D と WPF のレンダリングスレッド間で同期され、さらに画面に届く前に WPF によってもう一度合成されます。チャート自体がどれだけ速く描かれたかとは無関係に、すべてのフレームがテクスチャコピーとコンポジター同期のコストを払うのです。
ProEssentials の WinForms コントロールにはこの税がありません。標準の System.Windows.Forms.Control として、本物の Win32 ウィンドウハンドルと本物のデバイスコンテキストを所有します。Direct3D はその hDC に直接結合されており、コンピュートシェーダーで構築されたフレームはウィンドウへ直接提示されます — render-to-texture なし、D3DImage の受け渡しなし、二度目の合成なし。C++/MFC と Delphi/VCL のインターフェイスも同様で、マネージド レイヤーがまったく存在しないぶん、さらに直接的に hDC へ結び付きます。
実用上の結果: 代表的なデータセット全体で、ネイティブ WinForms インターフェイスは、同一の ProEssentials エンジンで WPF コントロールを駆動する場合よりエンドツーエンドで約5%高速と計測されます。コンピュートシェーダー、ゼロコピー データパス、オンデマンド フレームモデルはバイト単位で同一です — 唯一の違いは、WinForms が WPF のコンポジターを完全にスキップすることです。WinForms は ProEssentials にとって妥協のインターフェイスではありません。最速のインターフェイスです。
業界全体が WPF を高性能のターゲット、WinForms をレガシーと位置付けています。render-to-texture 型の WPF エンジンにとって、この枠組みは自己成就します。Direct3D を hDC に結合するエンジンにとっては、枠組みが反転します: WPF のコンポジターが不在であることが、ネイティブ パスを速くするのです。同じ1億ポイントデモを WinForms と WPF の両コントロールで走らせれば、その差をご自身で確認できます。
| WinForms factor | ProEssentials | SciChart | LightningChart | DevExpress | Syncfusion | ComponentOne | Telerik | ScottPlot |
|---|---|---|---|---|---|---|---|---|
| Native WinForms control | ✅ Yes | ❌ WPF-in-ElementHost | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes (OSS) |
| GPU technology | Direct3D compute shaders, hDC-coupled | (WPF) DirectX game loop | DirectX immediate-mode | GDI+ / optional DirectX | None — GDI+ only | GDI+ / optional Direct2D | GDI+ (Direct2D is WPF-only) | CPU — System.Drawing / SkiaSharp |
| Fast large-data path on WinForms | Compute shader + zero-copy | via WPF only | DirectX series | SwiftPlot (WinForms-only) | None (fast series WPF-only) | Direct2D mode | None (aggregate manually) | Decimation |
| Frame model | On-demand | Continuous (WPF loop) | Continuous DirectX loop | On-demand | On-demand | On-demand | On-demand | On-demand |
| Data fidelity at scale | Lossless — every point | Resampled | Lossless (correct series) | Lightened / object-per-point | Lossless but unaccelerated | Lossless | Requires aggregation | Decimated |
| Data loading | Zero-copy pointer (UseDataAtLocation) | Copies into DataSeries | Copies via AddSamples | SeriesPoint objects | IEnumerable iteration | Data binding / arrays | DataPoint objects | Arrays (managed↔native copy) |
| Stated / benchmarked ceiling | 100M lossless, ~15 ms | n/a natively | Billions (marketing) | 20M+ "without preprocessing" | Unbounded but slow | Benchmarked to 30K | "90K is too much" | 10M+ (100+ ms init) |
| vs WPF on same engine | ~5% faster (no compositor hop) | — | — | — | — | — | — | — |
WPF から WinForms へ移ると、競合の顔ぶれが変わり — さらに重要なことに — 多くのライバルの高性能テクノロジーは付いてきません。攻撃的に「fast series」や GPU レンダリングを宣伝するいくつかのライブラリは、それらのパスを WPF、WinUI、UWP でしか公開していません。WinForms では GDI+ へ、機能を削った高速ビューへ、あるいは何もないところへフォールバックします。どれがどれかを理解することは、どんな単一のベンチマーク数値よりも重要です。
ProEssentials の WinForms コントロール(PegoWin、PesgoWin、Pe3doWin、PepsoWin、PepcoWin)は標準の System.Windows.Forms.Control の子孫で、Direct3D コンピュートシェーダーを使ってチャート画像を完全に GPU 上で構築します。数千の GPU コアがすべてのデータポイントを並列処理し、CPU は配列を一切走査しません。完成したフレームはコントロールの hDC へ直接提示されます。
大規模データ レンダリングは少数のプロパティで有効化します — PeData.ComputeShader = true と StagingBufferX/Y/Z フラグ — そしてデータは UseDataAtLocation() で供給します。これは既存の配列をコピーするのではなく、そのポインタを保持します。float から double への変換も、ポイントごとのオブジェクト割り当ても、データに対するマネージド ループもありません。
パイプラインはオンデマンドで動作します: データまたはビューポートが実際に変化したときだけ描画します。アイドル状態のチャートの GPU 消費はゼロです。これは WPF コントロールが使うのと同じエンジン、同じシェーダー、同じゼロコピー パスです — ただし WPF の render-to-texture コンポジター中継がないため、WinForms パスのほうが速く計測されます。
RTX 3090 での報告スループット: 1億のロスレス ポイントを約15ミリ秒で構築し、毎フレーム1億ポイント全データ転送を含むエンドツーエンドのフレームレートは約15 FPS — リサンプリングなし、ダウンサンプリングなし、いかなるデータ削減もなし。
同じネイティブ Win32 DLL が、WinForms(.NET プロパティ インターフェイス経由)と C++/MFC および Delphi/VCL(PEnset/PEvset DLL API 経由)を駆動します。3つすべてが Direct3D を hDC に結合するため、3つすべてが render-to-texture 型 WPF に対するネイティブパスの性能優位を得ます。
SciChart は最速の WPF チャートとして広く引用されますが、ネイティブの WinForms コントロールがまったくありません。SciChart 自身のドキュメントが、WinForms は「WPF との統合を通じて」のみサポートされると述べています — つまり、WPF の SciChartSurface を Microsoft の ElementHost 内にホストする方式です。
これは、SciChart の WinForms デプロイが WPF のすべての特性 — render-to-texture コンポジターパスを含む — に加え、マウスイベント、フォーカス、Z オーダーに関するよく知られた ElementHost 相互運用の注意点を引き継ぐことを意味します。WinForms の衣装を着た WPF コントロールを動かしているのです。
真のネイティブ WinForms アプリケーション — 特に Win32/MFC の系譜を持つデータ収集ソフトウェア — には、第一級の SciChart の選択肢は存在しません。このカテゴリーの看板的な高性能ブランドは、ネイティブ WinForms のエントリーをそもそも出していないのです。
ElementHost による WPF-in-WinForms ホスティングは、文書化された相互運用ブリッジであり、WinForms コントロールではありません。それを使うすべての WinForms ウィンドウに、WPF のコンポジターコストと、ElementHost のエアスペース・フォーカス・入力ルーティングの制限を持ち込みます。
LightningChart は、真にネイティブな WinForms のライバルとして最強です。GDI+ ではなく低レベル DirectX でレンダリングし、非常に高い容量を宣伝しています(過去の資料では最大10億ポイント、現行マーケティングでは数十億という数字を主張)。
そのトレードオフは WPF ページと同じです: 連続 DirectX レンダーループは何も変わらなくても GPU を稼働させ続けるため、アイドル状態のダッシュボードもフレームを描き続けます。また、デプロイには歴史的にオンライン アクティベーションと再アクティベーション料金が必要でした — エアギャップされた産業・防衛システムには現実的な障害です。
大規模スケールでのロスレス レンダリングは正しい系列タイプの選択に依存します。誤ったタイプはコンパイル時の警告なしに、性能を桁違いに静かに劣化させます。
DevExpress が興味深いのは、その高速大規模データビュー SwiftPlotSeriesView が WinForms 専用である点です — WPF の ChartControl には存在しません。DevExpress は「前処理なしで2,000万ポイント超」を可視化できると宣伝し、オプションの DirectX モードは UHD で GDI+ より最大9倍高速です。
SwiftPlot は、他のビュータイプで使える機能を意図的に省いた「軽量化」生成アルゴリズムで速度を達成しており、基盤のデータモデルは依然としてポイントごとのオブジェクトです。1億ポイントでは、レンダリングを始める前に数十億バイトの DataPoint オブジェクトを割り当てることになります。
数万から数百万程度の範囲では有能なリアルタイム ビューですが、これは CPU/GDI+ に根ざしたパスにオプションの DirectX が付いたもの — コンピュートシェーダー エンジンではなく、ゼロコピーでもありません。
Syncfusion は大容量データ向けに「Fast Series」(FastLineSeries、FastLineBitmapSeries)を宣伝していますが、それらは WPF、WinUI、UWP にしか存在しません。WinForms には高速系列のパスがありません。Syncfusion 自身のサポートチームが WinForms チャートへの fast series 追加の機能リクエストを記録し、実装の当面の計画はないと述べています。
WPF 上でも、高速パスは CPU ベースです: FastLineBitmapSeries は WriteableBitmap に描画し、100万ポイントのレンダリングに「数秒」かかります。Syncfusion は DirectX 系列も廃止しました。したがって WinForms は GPU アクセラレーションのない標準 GDI+ レンダリングに頼ることになります。
Syncfusion は約10万ポイント未満のビジネス ダッシュボード向けの幅広い UI スイートとしては強力ですが、大容量の科学向け WinForms チャートエンジンではありません。
ComponentOne FlexChart(Mescius/GrapeCity)は GDI+ デフォルトとオプションの Direct2D「高性能」モードを持つ有能なネイティブ WinForms コントロールです — しかし、自社公開の性能ベンチマークは100〜30,000ポイントしかテストしておらず、1億スケールより3〜4桁下です。
Telerik RadChartView は WinForms では GDI+ ベースで、ハードウェア アクセラレーションの Direct2D/Skia オプションは WPF 専用です。Telerik 自身のチームが、RadChartView には90,000ポイントは「多すぎる」と述べ、プロットの前にデータを集約・平均して削減することを推奨しています — ロッシーな回避策です。
ScottPlot は支配的な無料/オープンソースの選択肢です(System.Drawing、その後 SkiaSharp による CPU)。代表サブセットへのデータ間引きに依存し、超大規模プロット(1,000万ポイント以上)の初期化には100ミリ秒以上かかります。メンテナー自身が、ポイント配列のマネージド→ネイティブ マーシャリングが根本的な上限だと述べています。レガシーの Microsoft Chart(System.Windows.Forms.DataVisualization.Charting)は公式に非推奨で、GDI+ ベース、出自は基本的な Dundas Chart であり、モダンな .NET(5〜8)ではサポートされません。
WPF ページで述べたオンデマンド対連続の違いは WinForms でもまったく同じく当てはまり、チャート選定で最も過小評価されている要素であり続けています。ProEssentials はデータが変化したときだけ描画します。LightningChart の連続 DirectX ループはお構いなしに描画します。ネイティブ WinForms コントロールでは、オンデマンドのフレームが hDC へ直接提示されるため、アイドル時の GPU 節約に加え、フレームが発生したときにもコンポジター オーバーヘッドがありません。
オンデマンド レンダリングはアクティブなレンダリング中に遅くなるわけではありません — コンピュートシェーダー パスは同じだけ速いのです。違いはフレームとフレームの間に何が起こるかです: ProEssentials は何もしません。連続ループのライブラリは、同一のピクセルを再描画するために GPU とファンを稼働させ続けます。
忠実度の問題は WPF よりも WinForms で先鋭化します。WinForms のパスの多くが GDI+ か間引きベースだからです。本当の問いは、ライブラリがすべてのポイントをレンダリングするのか、それともダウンサンプリングされた近似を黙って見せているのか、です。
ProEssentials はすべてのポイントをレンダリングします。コンピュートシェーダーが1億の値すべてを処理し、ピクセル列ごとの正しい min/max/close を計算するため、スパイクや異常は生き残ります — ロスレスで、hDC の上で。
Telerik と ScottPlot は応答性を保つために明示的にデータを削減します(集約、間引き)。DevExpress SwiftPlot はアルゴリズムを軽量化します。Syncfusion の WinForms には高速パスがありません。どれもトレンドの把握には十分ですが、どれも単一サンプルのイベントを隠し得ます。
ECG の不整脈、振動の共振ピーク、マイクロ秒単位の半導体の逸脱にとって、ロスレスと間引きの差は、イベントを見るか見逃すかの差です。
| WinForms library | Large-data behavior | Data rendered |
|---|---|---|
| ProEssentials | Compute shader, all points | 100 % lossless |
| LightningChart | DirectX, correct series | 100 % |
| DevExpress | SwiftPlot lightened | Feature-reduced |
| Syncfusion | GDI+, no fast path | Lossless but slow |
| Telerik | Aggregate / average down | Reduced |
| ScottPlot | Decimation to subset | Decimated |
数百万ポイントを平均化して「扱う」WinForms チャートは、あなたのデータをレンダリングしていません — あなたのデータの要約をレンダリングしているのです。高速パスがロスレスか間引きかを必ず確認してください。
ベンチマークには異論の余地がありますが、再現可能なリポジトリにはありません。WinForms エンジンの最も明快な実証は 3D LiDAR ポイントクラウド デモです。実際の航空 LiDAR 反射データ — 整然としたグリッドラスターではない非構造化 XYZ データ — を、hDC へ提示される GPU コンピュートシェーダーの頂点構築でレンダリングします。
当社は主要チャートベンダー各社の公開 GitHub を調査し、クローンしてすぐ動く WinForms の LiDAR または大規模ポイントクラウド デモを探しました。以下の結果は速度の主張ではありません — 可用性の主張です。そして可用性は定義上検証可能です。リポジトリを自分の手に持てるのですから。
| Vendor | Public WinForms / native LiDAR demo | Standalone clone-and-run repo | Points rendered |
|---|---|---|---|
| ProEssentials (this repo) | ✅ Yes | ✅ Yes — clone & F5 | 2,500,000 raw airborne returns |
| SciChart | ✅ Yes (WPF) | ❌ Sub-folder of examples mega-repo | ~250,000 (gridded raster) |
| LightningChart | 📝 Blog tutorial only | ❌ Trial install required | Marketing claims up to 55M; no public repo to verify |
| DevExpress | ❌ None found | ❌ | — |
| Syncfusion | ❌ None found | ❌ | — |
| Telerik | ❌ None found | ❌ | — |
コンピュートシェーダー パスは、数百万ポイントのクラウドにおけるクリックから最初の描画までを、数秒の CPU 頂点構築から実質的に瞬時の GPU 構築へ変えます — 同じコード、同じデータ、同じハードウェアを、4行のプロパティで切り替えるだけです。売り文句は「ProEssentials が最速」ではありません。「ProEssentials は、このスケールで焦点の定まった再現可能な LiDAR リポジトリを出している唯一の WinForms チャートベンダー」です。
ComputeShader なしでは、CPU が単一コアで各ポイントを順番に走査して頂点データを構築します。PeData.ComputeShader = true にすると、GPU が潜在的に2,000以上のコアでこの作業を並列に行います。250万ポイントの LiDAR クラウドでの計測効果: クリックから最初の描画までが、約3秒の CPU 頂点構築から実質的に瞬時へ短縮されます。
StagingBuffer フラグは、転送中にレンダーパイプラインを停止させない効率的な CPU→GPU アップロードを可能にする、GPU からアクセス可能な中間メモリ領域を割り当てます。4行をコメントアウトすれば意図的に遅い CPU パスを通れます — 前後比較に便利です:
// 3D 散布図、GPU 頂点構築、WinForms の hDC へ提示
Pe3do1.PeData.ComputeShader = true;
Pe3do1.PeData.StagingBufferX = true;
Pe3do1.PeData.StagingBufferY = true;
Pe3do1.PeData.StagingBufferZ = true;ProEssentials において、WinForms は WPF からのダウングレードではありません — より速いインターフェイスです。Direct3D がウィンドウの hDC に結合し、WPF の render-to-texture コンポジター中継をスキップするため、同じエンジンでエンドツーエンド約5%の優位があります。GPU コンピュートシェーダー、オンデマンド レンダリング、ロスレスの忠実度、ゼロコピー読み込みが手に入り、1億のロスレス ポイントを約15ミリ秒でレンダリングします。
代替の中では、SciChart にはネイティブ WinForms コントロールがなく(WPF-in-ElementHost のみ)、Syncfusion には WinForms の fast series がなく、Telerik は数万ポイント程度で頭打ちになり集約を推奨し、ComponentOne のベンチマークは3万ポイントまで、ScottPlot は間引きし、Microsoft Chart は非推奨です。LightningChart と DevExpress が真のネイティブな対抗馬です — どちらも有能で、どちらもトレードオフを抱えています(連続ループの電力消費とアクティベーション、機能を削ったポイントごとオブジェクトの高速ビュー)。データ忠実度と大規模性能が重要なネイティブ WinForms・C++/MFC・Delphi/VCL チャートには、ProEssentials の hDC 結合コンピュートシェーダー エンジンが、入手可能な最も強固な技術基盤です。
ProEssentials のサポートは無料・無制限で、レンダリングエンジンを作ったエンジニアが直接提供します。hDC 結合、コンピュートシェーダー、ゼロコピー読み込み、ネイティブのリアルタイム性能について、何でも聞いてください。
ProEssentials チームに連絡 →このページの競合に関するすべての主張は、各ベンダー自身のドキュメント、ベンチマーク、サポート上の発言が出典です。直接ご確認ください:
御社とエンドユーザーに最も簡単で最もプロフェッショナルな価値を提供することで、お客様の成功を最優先目標とします。
ProEssentials は、自らのチャートコンポーネントを必要としたプロの電気エンジニアから生まれました。ProEssentials を使う一流エンジニアリング企業の長いリストに加わってください。
ProEssentials のお客様であることに感謝するとともに、ProEssentials チャートエンジンをご検討いただきありがとうございます。