http://cafe.naver.com/mssilverlight/3021에 니르워프님이 결정적인 정보와 함께 실험 설계의 문제점도 짚어주셨어요.

[이슈1] 상이한 측정 결과

제 컴에서 공도님의 소스를 받아서 실행을 해본바, 이슈1일때 공도님의 블로그에서 보여 지는 그런식의 결과는 없다라는 것입니다. MaxFramerate의 설정과 무관하게, 주어진 인터벌로 나옴.

16ms의 인터벌을 주면, MaxFramerate의 설정에 따라 MaxFramerate만큼으로 제한되는 프레임 레이트를 출력하는것이 공도님의 블로그에 올려져 있으나 저의 측정에서는 모두 16ms에 해당하는 프레임 레이트로 나옴.

소스 분석해본바, 공도님의 방법은 MaxFramerate과의 연관성이 파악하는 방법이 아니어보이네요.

[이슈2]

적절치 않는 계산 방법을 사용하고 있습니다.

하나의 인터벌이 지나면(완료되면) 한개의 카운팅을 하는 방법을 취하고 있고, 인터벌이 완료되었을때 할당된 시간이 초과되었는지를 점검하는데, 이 방법으로 하면, 할당 시간보다 조금더 지나칩니다. 인터벌이 클수록 지나치는 크기는 더 커질수 있습니다.

인터벌이 50이라면 49이상의 오차도 나올 수 있습니다.

일단 이슈2를 해결하기 위해 코드를 다음과 같이 약간 수정했고요,

private readonly int LoopCount = 100;

void onTime(object sender, EventArgs e)

{

    if (++_count == LoopCount)

    {

        TimeSpan elapsed = DateTime.Now - _beginTime;

        StopStoryboard();

        StopTimer();

        outputText.Text = string.Format("{0} FPS", ((LoopCount / elapsed.TotalMilliseconds) * 1000).ToString("0.00"));

    }

}

작동 완구와 소스는 아래... 또는 여기에서 테스트. http://shiverlight.net/Sample/GameLoopTest/




문제는 결과에 큰 차이가 없다는 점이에요.

이렇게 되면 짐작해 볼 수 있는 건 현재 운영체제의 버전이나 개별 상황에 따라 실버라이트 런타임이 제공하는 타이머의 안정도나 정확도가 떨어질 수 있느냐의 문제인데요, 각자 테스트 조건을 다르게 해서 특이할 만한 사항이 있으면 알려주시길 바래요.

제 조건은 아래와 같아요.

OS : Vista Enterprise SP1
CPU : Core2Duo 1.4GHz
GPU : Intel GMA950
Browser : IE7, FF3

OS와 브라우저, CPU, GPU외에 영향을 줄 만한 요소는 없을 거라고 생각하고요. 램이야 남을 만큼 남아 있으니^^;;

어쨌거나, 좋은 조언을 해주신 니르워프님께 감사드려요 :)

저작자 표시 동일 조건 변경 허락
신고
Posted by gongdo


티스토리 툴바