2016-11-25 68 views
0

改變視頻的簡單應用程序。MediaPlayer隨機使用CPU [UWP] [UI.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

回答

0

好像在Visual Studio 2015年如果我打開這個項目,並運行該代碼中的錯誤 - CPU上升。如果我在運行代碼時切換到Visual Studio中的設計器視圖,並等待其加載 - CPU會回退並且一切正常。