すらすらプログラマーへのお問い合わせ
すらすらのブログ
アクセス数  累計:000,125,024  昨日:000,000,099  本日:000,000,046
Loading
やってみよう!
.NET プログラミング
プロパティグリッド
印刷
リストボックス
スレッド
リストビュー
インストーラー
やってみよう!

できるVisual Studio 2015 Windows /Android/iOS アプリ対応

独習C# 第3版

VisualBasic2013パーフェクトマスター (Perfect Master SERIES)

プログラミング.NET Framework 第4版 (Microsoft Press)

VisualBasic2013逆引き大全555の極意

猫でもわかるWindowsプログラミング 第4版 (猫でもわかるプログラミング)

VisualC#2013逆引き大全555の極意

GDI vs WPF ④ 最終更新:2010/12/19
【Amazon ランキング:DVD - キッズ・ファミリー】

4回目となる今回の対決は DrawingGroup を使った描画です。
前回 GDI vs WPF ③ でラスタグラフィックで描画してみましたが、DrawinGroup を使ってベクタグラフィックで描画できることが分かりましたので早速計測してみました。
テスト環境
CPU Intel Core i7 940 (2.93GHz 4コア)
メモリー DDR3-1600 C9 6GB(2GB×3)
GPU ATI Radeon HD 5700 (860MHz)
DDR5 1024MB (1200MHz)
Direct 2D バージョン 8.0.1.01.1030
Direct 3D バージョン 8.14.10.0753
.NET Framework 4.0
WPF DrawingGroup
プログラムは RenderTargetBitmap を使ったものとほとんど一緒です。
C#[WPF.Windows2.cs]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace WPF
{

    
/// <summary>
    
/// Window2.xaml の相互作用ロジック
    
/// </summary>
    
public partial class Window2 : Window
    {
        
public Window2()
        {
            InitializeComponent();
        }

        
private void button1_Click(object sender, RoutedEventArgs e)
        {
            
DateTime stTime = DateTime.Now;

            
DrawingGroup dg = new DrawingGroup();

            
using (DrawingContext dc = dg.Open())
            {
                
for (int x = 0; x < 1000; x += 2)
                {
                    
for (int y = 0; y < 1000; y += 2)
                    {
                        
this.DrawRect(dc, x, y);
                    }
                }
            }

            
DrawingImage di = new DrawingImage(dg);
            
this.image1.Source = di;

            
TimeSpan span = DateTime.Now - stTime;

            
MessageBox.Show(string.Format("描画時間:{0}.{1}秒",
                span.Seconds, span.Milliseconds),
                
"WPF 矩形描画",
                
MessageBoxButton.OK,
                
MessageBoxImage.Information);
        }

        
private void DrawRect(DrawingContext dc, int x, int y)
        {
            
SolidColorBrush drBursh = new SolidColorBrush(Colors.White);
            
Pen drPen = new Pen(Brushes.Black, 0.1F);
            
Rect drRect = new Rect(x, y, 100, 100);
            dc.DrawRectangle(drBursh, drPen, drRect);
        }
    }
}
計測結果①
WPF RenderBitmap
現在調査した中では最速でしたが、GDI にはまだまだかないません。
描画方法 メッセージ表示時間 画面描画完了時間
GDI 9.750 秒 約 10 秒
WPF Shape 7.264 秒 約 42 秒
WPF Drawing 6.252 秒 約 37 秒
WPF RenderTargetBitmap 24.539 秒 約 25 秒
WPF DrawingGroup 2.848 秒 約 24 秒
※画面描画完了時間はストップウォッチで計測しました。
計測結果②
WPF Drawin
CPUは RenderTargetBitmap で描画した時と同じぐらいでした。
※このページで紹介しているサンプルコードについて管理者は動作保障をいたしません※
※サンプルコードを使用する場合は、自己責任でお願いします※

【楽天 ランキング:パソコン・周辺機器 - ノートパソコン】




このサイトはフリーソフトのMerge HTMLで作成されています。
このサイトはリンクフリーです。

ページの先頭に戻る Copyright© 2010-2015 Jun.Shiozaki All rights reserved.