WPF2008/08/17 09:00

이번 시간에는 WPF Application의 FPS(Frame Per Second)를 측정하는 방법에 대해 알아보겠습니다. FPS는 1초에 몇 번 화면을 그리는가를 의미 하며, 애니메이션이나 게임들을 개발할 때 꼭 고려해야 하는 것 중에 하나 입니다. 아래 동영상은 지금 소개해 드릴 방법으로 FPS를 측정하는 동영상 입니다.


방법이야 여러 가지가 있겠지만 저는 WPF Application의 표시 화면을 나타내는 CompositionTarget Class를 사용하여 측정해 보았습니다. CompositionTarget은 WPF의 Animation엔진에서 제공하는 기능 중에 하나로 Rendering Event를 통해 Frame당 Animation을 제어 할 수 있는 기능을 제공합니다.

아래는 FPS측정기 전체 소스 코드입니다.

[XAML]

<Window x:Class="WPFFPS.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="420" Width="450">

<Grid>

<TextBlock x:Name="TxtFPS" Text="FPS : 0" FontSize="15" HorizontalAlignment="Center" />

<Button Height="50" FontSize="20" Content="WPF KOREA">

<Button.Triggers>

<EventTrigger RoutedEvent="Button.Loaded">

<BeginStoryboard>

<Storyboard Storyboard.TargetProperty="Height" Duration="0:0:0.3"

AutoReverse="True" RepeatBehavior="Forever">

<DoubleAnimation From="50" To="200"/>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Button.Triggers>

</Button>

</Grid>

</Window>

[C#]

public partial class Window1 : Window

{

public Window1()

{

InitializeComponent();

CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);

}


private int FPS = 0;

private double LastFrame;

void CompositionTarget_Rendering(object sender, EventArgs e)

{

FPS++;

if ((DateTime.Now.TimeOfDay.TotalMilliseconds - LastFrame) > 1000)

{

TxtFPS.Text = "FPS : " + FPS;

LastFrame = DateTime.Now.TimeOfDay.TotalMilliseconds;

FPS = 0;

}

}

}

소스가 무척이나 간단하기 때문에 추가적인 설명은 생략하도록 하겠습니다. 궁금하신 점은 리플달아주세요~
아래는 전체 소스코드입니다.

사용자 삽입 이미지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스
TAG ,