0

PowerPoint で奇妙な問題が発生しています。現在のスライドに一連の図形をプログラムで挿入する .NET ベースのアドインがあります。一連の形状が初めて生成されるとき、全体の操作にかかる時間は 1 秒未満です。ユーザーが操作を繰り返すと、継続時間が 15 秒、おそらくそれ以上になるまで何度も増加します (この値でのテストは停止しています)。PowerPoint を再起動すると、操作が完了するまでに 1 秒もかかりません。特定の時点で GC.Collect を呼び出そうとしましたが、特定の順序ですべての形状を生成するように形状セット生成コードを完全に書き直すことを検討していますが、これは非常にコストのかかるオプションです。この問題を診断する方法または修正する方法について、他に提案はありますか?

この問題を再現する簡単なコード シーケンスを次に示します。

// 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 参照を解放しようとしましたが、問題は解決しませんでした。コードを実行すると、レンダリングと削除の時間が 200 ミリ秒から 10 秒に増加することがわかります。

4

1 に答える 1