1

私はCamera APIで重大な問題に直面しています。99.99% の状況でフレームワークが原因ではないことがわかっていても、Windows でのカメラの処理方法に問題があるのではないかと考え始めています。電話。

問題

私のコードは些​​細なもので、2 つの非常に単純なページしかありません。最初のページでは、アプリケーションがフレーム レートを強制的に更新するように、ループ アニメーションを含む四角形を追加して回転させました。

プロファイル セッションの結果は次のとおりです。

アプリケーションのライフサイクルをテストする

最初のページにとどまっている限り、フレームレート カウンターは安定した 60 fps を表示します。カメラをフィーチャーした 2 番目のページを起動すると、システム カメラの使用により fps が低下します。ただし、戻るキーを押すと、カメラは正しく配置されますが、フレームレートは少し低くなります (~53 fps)。さらに印象的なのは、グラフ データは、何かがまだ実行中であり、パフォーマンスに悪影響を及ぼしていることを示しています。組み込みの分析では、システム アプリが CPU の 47% を使用していることがわかりました。これは、カメラ ページが表示されたときと同じです!

この動作の既知の理由はありますか?

マイコード

2 ページ目のコード ビハインド:

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;
        }
    }
}

2 ページ目の私の 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>
4

1 に答える 1

1

カメラを使用するアプリケーションでも同様の問題がありました。OnNavigatedFrom ではなく OnNavigatingFrom オーバーライドを使用し、次の順序でそれを行うことでそれを克服することができました:

  1. イベントの購読解除
  2. 廃棄();
  3. カメラ = null;
于 2013-08-15T10:02:23.043 に答える