2013-06-07 2 views
0

PowerPoint에서 이상한 문제가 발생했습니다. 현재 슬라이드에 모양을 프로그래밍 방식으로 삽입하는 .NET 기반 추가 기능이 있습니다. 모양 세트가 처음 생성되면 총 작업에 1 초 미만이 필요합니다. 사용자가 작업을 반복하는 경우 지속 시간이 15 초에 도달 할 때까지 계속 증가합니다. 아마도 그 이상으로 테스트가 중단되었습니다. PowerPoint를 다시 시작하면 작업을 완료하는 데 1 초도 걸리지 않습니다. 특정 시점에 GC.Collect를 호출하려했으나 특정 순서의 모든 셰이프를 생성하기 위해 셰이프 집합 생성 코드를 완전히 다시 작성하는 것을 고려하고 있지만 이는 매우 비용이 많이 드는 옵션입니다. 이 문제를 진단하는 방법이나 해결 방법에 대한 다른 제안이 있습니까?PowerPoint 성능이 저하됨

이 문제를 재현하는 간단한 코드 시퀀스는 다음과 같습니다.

// Attach the callback below to a button in your add-in ribbon. 
public void OnDevBtnReproduceRenderingPerformanceIssue(IRibbonControl control) 
{ 
    // Generate a decent set of shapes on the current slide, 
    // delete them, repeat until rendering time exceeds a certain value. 
    var slide = (Slide)Globals.ThisAddIn.Application.ActiveWindow.View.Slide; 
    var stopwatch = new Stopwatch(); 

    for (var iter = 0; iter < 1000; iter++) 
    { 
     stopwatch.Start(); 
     GenerateShapesSet(slide); 
     DeleteAllShapes(slide); 
     stopwatch.Stop(); 
     Debug.Print("Render+delete took {0} ms", stopwatch.ElapsedMilliseconds); 
     stopwatch.Reset(); 
     } 
} 

private static void DeleteAllShapes(Slide slide) 
{ 
     while (slide.Shapes.Count > 0) 
     { 
     slide.Shapes[1].Delete(); 
     } 
} 

private static void GenerateShapesSet(Slide slide) 
{ 
    var shapesCount = 100; 

     for (var iter = 0; iter < shapesCount; iter ++) 
     { 
      var shape = slide.Shapes.AddTextbox(
       MsoTextOrientation.msoTextOrientationHorizontal, 
       100, 
       100, 
       100, 
       100 
       ); 
      shape.TextFrame2.TextRange.Text = "Test test test"; 
      shape.TextFrame2.TextRange.Font.Name = "+mn-lt"; 
     } 
} 

우리는하지만이 문제가 해결되지 않은, 모양에 대한 모든 COM 참조를 해제하려고했습니다. 코드가 실행되면 렌더링 + 삭제 시간이 200ms에서 10 초로 증가하는 것을 볼 수 있습니다.

+0

코드를 보지 않고도 도움이 될 것입니다. –

+0

@ KazJaw : 문제를 재연하기 위해 코드 시퀀스를 작성해야하며 SkyDrive에 게시 할 예정입니다. 필자는 실제 코드를 게시 할 수 없으며 어쨌든 수천 줄의 코드를 사용합니다. – Dan

답변

1

해결책을 찾았습니다. 각 모양 삭제/일괄 처리 후에 StartNewUndoEntry를 호출하십시오. 이 호출을 사용하면 각 배치마다 렌더링 시간이 더 이상 증가하지 않습니다.

관련 문제