2013-02-18 48 views
1

我面臨着Camera API的嚴重問題,即使我知道在99.99%的情況下,框架不是責任,我開始考慮在那裏可能是相機在Windows Phone中處理的方式的問題。WinPhone8 Camera API似乎在處理通話後繼續運行

的問題

我的代碼是微不足道的,只有兩個非常簡單的頁面:第一個是用於導航到第二個,它使用相機API,並呈現在屏幕上預覽緩衝區的按鈕。在第一頁上,我還添加了一個帶有循環動畫的矩形來旋轉它,以強制應用程序更新幀速率。

輪廓會議的結果如下:

Test application lifecycle

只要我留在第一頁上,幀率計數器顯示一個堅如磐石的60fps。一旦我啓動了相機的第二頁,由於使用了系統相機,fps會下降。但是,當我按下後退鍵時,相機正確放置,但幀速率稍低(〜53 fps)。 更令人印象深刻的是,圖表數據顯示,某些東西仍在運行並且損害了perfs!內置分析告訴我,系統應用程序使用47%的CPU,與顯示相機頁面時相同!

此行爲是否有已知的原因?

我的代碼

我的代碼隱藏第二頁:

public partial class MyScannerView : PhoneApplicationPage { 
    private PhotoCamera camera; 

    public MyScannerView() { 
     InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) { 
     base.OnNavigatedTo(e); 

     camera = new PhotoCamera(CameraType.Primary); 
     viewfinderBrush.SetSource(camera); 
    } 

    protected override void OnNavigatedFrom(NavigationEventArgs e) { 
     base.OnNavigatedFrom(e); 

     if (camera != null) { 
      camera.Dispose(); 
      camera = null; 
     } 
    } 
} 

我的第二頁XAML:

<Canvas x:Name="viewfinderCanvas"> 
    <Canvas.Background> 
     <VideoBrush x:Name="viewfinderBrush"> 
      <VideoBrush.RelativeTransform> 
       <CompositeTransform x:Name="viewfinderTransform" CenterX="0.5" CenterY="0.5" /> 
      </VideoBrush.RelativeTransform> 
     </VideoBrush> 
    </Canvas.Background> 
</Canvas> 
+0

你知道嗎?你可以得到更多關於什麼運行的細節?如果深入瞭解性能分析器,可以看到哪個函數調用佔用了一定比例的CPU時間。也許它會幫助你識別正在運行的東西。 – Haspemulator 2013-02-18 11:29:09

+0

確實。但是,UI線程只佔CPU的4.6%,這並不奇怪,因爲代碼非常基礎。有些框架需要花費大量的時間來繪製,但我只能說「System.Windows.dll:ManagedFunction_0(...)」似乎是罪魁禍首。有些東西正在後臺運行,但這就是我所能說的。 – 2013-02-18 13:28:54

+0

順便說一句,有沒有某種WinPhone官方錯誤跟蹤器 – 2013-02-18 13:32:33

回答

1

我有類似的尋求與應用程序的問題,它使用相機。 託管使用不OnNavigatedFrom但OnNavigatingFrom重寫並且在這樣的順序做它克服它:

  1. 從事件
  2. 處置退訂();
  3. camera = null;
+0

謝謝,我會盡快測試,並會告訴你! – 2013-08-15 14:37:30

相關問題