MediaPlayer随机消耗CPU [UWP] [UI.Composition]

时间:2016-11-25 16:01:19

标签: uwp composition

更改视频的简单应用。

在诊断工具中运行时,CPU上升并保持约50%(任务管理器5%)直到停止,另一次运行它保持在5%(任务管理器少于1%)。

代码始终如一。视频格式相同。

在Performance Profiler中,我看到nvwgf2umx.dll(nvidia)100%正在使用中调用WaitForSingleObjectEx和ReleaseSemaphore。

为什么每次随机运行我得到两种CPU消耗变量?

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        _playlist = new MediaPlaybackList();
        foreach (var uri in _uris)
        {
            _playlist.Items.Add(new MediaPlaybackItem(MediaSource.CreateFromUri(uri)));
        }

        _mediaPlayer = new MediaPlayer
        {
            IsLoopingEnabled = true,
            AutoPlay = false,
            IsMuted = true,
            Source = _playlist,
        };
        _mediaPlayer.SetSurfaceSize(new Size(512, 512));

        _visual = ElementCompositionPreview.GetElementVisual(this);
        _compositor = _visual.Compositor;

        _surfaceVideoBrush = _compositor.CreateSurfaceBrush(_mediaPlayer.GetSurface(_compositor).CompositionSurface);
        _surfaceVideoBrush.Stretch = CompositionStretch.UniformToFill;

        _spriteVisualVideo = _compositor.CreateSpriteVisual();
        _spriteVisualVideo.Size = new Vector2(512, 512);
        _spriteVisualVideo.Brush = _surfaceVideoBrush;

        ElementCompositionPreview.SetElementChildVisual(Grid, _spriteVisualVideo);

        _timer.Tick += _timer_Tick;
        _timer.Start();
    }

    private void _timer_Tick(object sender, object e)
    {
        _timer.Interval = TimeSpan.FromMilliseconds(Random.Next(200, 2000));
        NextVideo();
    }

    private void NextVideo()
    {
        _mediaPlayer.Pause();
        _playlist.MoveTo((uint)Random.Next(0, 15));
        _mediaPlayer.Play();
    }

XAML只有1个网格

PC - i7 4770,nVidia GTX9700

1 个答案:

答案 0 :(得分:0)

看起来像Visual Studio 2015中的一个错误。如果我打开这个项目并运行代码 - CPU会上升。如果我在运行代码时切换到Visual Studio中的设计器视图并等待它加载 - CPU退回并且一切正常。