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 초로 증가하는 것을 볼 수 있습니다.
코드를 보지 않고도 도움이 될 것입니다. –
@ KazJaw : 문제를 재연하기 위해 코드 시퀀스를 작성해야하며 SkyDrive에 게시 할 예정입니다. 필자는 실제 코드를 게시 할 수 없으며 어쨌든 수천 줄의 코드를 사용합니다. – Dan