2010-12-16 29 views
8

我有幾個相當簡單的動畫(移動文本,移動橢圓等),並在全屏(1920x1080減去任務欄)中運行,WPF性能套件在整個動畫中報告50 FPS左右的良好幀率。 Dirty Rect Addition約爲300 rect/s,SW幀在0到4之間,硬件幀在3到5之間。視頻內存使用量約爲80 MB。如何知道爲什麼動畫會造成口吃?

WPF Performance screen shot

問題是,動畫口吃每隔半秒。這是絕對不流暢:-(

我的機器是一個新的戴爾筆記本電腦XPS 15與GeForce GT 435 2GB內存 - 驅動程序是最新的(同樣的行爲發生在我的上網本(全屏幕),以及,所以我不認爲這是硬件相關的)

如果我使窗口越小口吃消失

用最簡單的動畫會出現口吃。 - 即使只是一對夫婦的元素但增加更多的元素肯定會使其更加引人注目。

如何找出原因這個口吃?

當我想到它時,我還沒有看到任何WPF動畫在全屏幕中平穩運行。這甚至有可能嗎?

+0

也許你是在重新粉刷太多?即即使兩幀之間沒有改變的像素都被標記爲髒。 – 2011-04-12 16:24:20

+1

偉大的問題!作爲一項測試,你有沒有試過只留下一個動畫控件來查看口吃是否繼續?如果沒有,那麼,你如何更新所有控件的數據,這意味着它全部在同一個線程上,或者你是產生任務/並行方法,然後當他們完成更新UI(在UI線程上)? – 2012-04-19 15:49:25

+0

>當我想到它時,我實際上沒有看到任何WPF動畫在全屏幕中平穩運行。 啊哈! WPF非常慢。你可以做的最好的方式是製作更復雜的用戶界面,降低幀率或等待WTF框架解決所有這些問題; P – 2012-07-10 13:50:41

回答

1

Patrick,

我沒有答案。我所能做的就是提供一些聲援。我試圖給ItemsControl設置動畫。這個概念非常簡單,真的。我有一個ListView,並在ListView中有一個GridView。我希望GridView中的項目順利地從一行到另一行,因爲基礎列表已排序,因此,例如,隨着列表中的值更改,排序列表將保持排序狀態。

我注意到這個:適度複雜的控制動畫是一個CPU豬。我相當肯定的口吃與CPU被最大化(我注意到你沒有在你的轉儲上面提供CPU圖)有關。將CPU保持在50%左右,動畫顯得平滑,高於75%,並且會出現這些結局。 仍在研究這個問題,但我認爲它比我的代碼更深入。

3

您是否試圖設置較低的「最大幀速率」動畫?

<Storyboard Timeline.DesiredFrameRate="10"> 
    <!-- ....blah blah blah --> 
</Storyboard> 

如果你的動畫是造成兒童或父元素的大規模重新計算,改變DesiredFrameRate都會在該系統進行的計算數的級聯效應。 此外,請查看link的「備註」部分。它解釋了爲什麼/何時應該使用它。

如果設置較低的幀速率可以修復您的口吃,那麼您需要考慮簡化XAML以限制動畫每幀所需的重新計算量(限制調整大小或受任何影響的子對象或父對象的數量方式 - 通過動畫製作的每個幀/更改

您可能還想查看「WPF Performance Suite」。這是一套非常棒的工具,用於確定WPF應用程序究竟發生了什麼,查看窗口的哪些部分正在重新繪製,何時以及每個XAML元素的CPU使用情況!

希望這會有所幫助!

0

我有一個類似的問題,它是口吃,沒有什麼真正重要的,它看起來像在我運行程序時在這裏和那裏的小口吃。在預感上,我關閉了谷歌瀏覽器,當它運行,並修復它,滾動變得完全平滑...

所以我的建議是,如果你有任何網絡瀏覽器打開檢查,看看他們是否關閉他們修復問題。