0

WPF のすべてのアニメーションは、1 ミリ秒のタイマー分解能で要求を行います。これは、Windows の既定値である 15.6 ミリ秒よりも低く、アニメーションの実行中にバッテリーが消耗します。私は .net 4.5 を使用し、Windows 10 で実行していますが、Windows 7 および 8 でも発生しています。

これは私のコードです:

   <Ellipse x:Name="Dash1" RenderTransformOrigin="0.5,0.5" Height="100" Width="100" StrokeDashArray="10" Stroke="Black">
        <Ellipse.Triggers>
            <EventTrigger RoutedEvent="Rectangle.Loaded">
                <BeginStoryboard>
                    <Storyboard RepeatBehavior="Forever" Timeline.DesiredFrameRate="30">
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="Dash1">
                            <EasingDoubleKeyFrame KeyTime="0:0:5" Value="360"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Ellipse.Triggers>
        <Ellipse.RenderTransform>
            <TransformGroup>
                <ScaleTransform/>
                <SkewTransform/>
                <RotateTransform/>
                <TranslateTransform/>
            </TransformGroup>
        </Ellipse.RenderTransform>
    </Ellipse>

要求されたタイマーの解像度を確認するには、管理者として実行しているコマンド プロンプトで次のコマンドを実行し、結果を確認します。

powercfg /energy

この問題または回避策を克服する方法はありますか? ありがとう。

アップデート

返事が遅れて申し訳ありません。MicrosoftによるWindowsタイマーの解決の説明は次のとおりです。

システム タイマーの解像度によって、Windows が次の 2 つの主要なアクションを実行する頻度が決まります。スケジュールされたタイマー オブジェクトが期限切れになっているかどうかを確認します。

デフォルトでは、Windows タイマーの解像度は 15.6 ミリ秒ですが、任意のプログラムでそれを下げるように要求できるため、バッテリーの消耗に大きな影響を与えます。たとえば、Chrome と vlc は、タイマーの解像度を下げることで認識されます。

最近、wpf アニメーションを再生すると、アニメーションの同期に使用される内部クロックが原因で、タイマーの解像度が 1ms に低下することがわかりました (私は推測します)。アニメーションが停止すると、タイマーの解像度は通常の値に戻りますが、再生中は CPU 消費が大幅に増加します。また、アニメーションに設定したフレームレートもこれには影響しません。

これを防ぐ方法はないかと思っていましたが、残念ながらこれは WPF の既知の問題であり、解決する方法はありません。

最後に、ディスパッチャ タイマーを使用して独自のプログラム アニメーションを使用しています。これは、タイマーの解像度に影響を与えず、驚くほど多くの CPU を消費しませんが、レンダー スレッドのワークロードに依存するため、スムーズではありません。

詳細については、こちらをご覧ください。

http://download.microsoft.com/download/3/0/2/3027d574-c433-412a-a8b6-5e0a75d5b237/timer-resolution.docx

https://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/

4

0 に答える 0