首页 > 解决方案 > 每次运行代码都会变慢 (PowerPoint VSTO)

问题描述

我正在编写一个 PowerPoint AddIn (VSTO),它执行以下操作(非常粗略): 1. 遍历所有幻灯片 2. 遍历每张幻灯片的所有标签并将标签信息写入 List-Object 3. 对List-Object 并更新 list-Object 中的一些列 4. 循环 List-Object 并将标签写回对应的幻灯片/标签

我认识到这段代码的运行速度越来越慢——第 10 次运行比第一次慢 3-4 倍。我还看到每次运行的内存使用量都会增加。

我有什么工具可以检查瓶颈在哪里?如何找到使我的代码每次运行都变慢的问题?有没有办法在每次运行后清除 AddOn 使用的内存等?

很抱歉提出这样一般性的问题,但如果您需要更多详细信息,请告诉我

我的 PowerPoint 有 32 张幻灯片——我想为每张幻灯片写标签(在本例中为 49 个标签)。由于更新等原因,用户执行了多次代码。我通过自动执行 11 次来模拟这一点。我在这里认识到与用户交互相同的行为:每次执行时,32 张幻灯片的标签编写速度都会变慢。

我将我的代码减少到具有相同行为的最低限度。我还尝试先删除每张幻灯片上的标签,但没有成功。

        private void btn_DoIt10Times_Click(object sender, EventArgs e)
    {

        Stopwatch watch = new Stopwatch();
        watch.Start();

        SlideTags_Write();

        watch.Stop();
        //MessageBox.Show("Time spend: " + watch.Elapsed);

        for (int i = 1; i <= 10; i++)
        {
            SlideTags_Write();
        }

        Stopwatch watch2 = new Stopwatch();
        watch2.Start();

        SlideTags_Write();

        watch2.Stop();
        MessageBox.Show("Time 1st run: " + watch.Elapsed + "\n Time 11th run: " + watch2.Elapsed);
    }

    public void SlideTags_Write()
    {
        PowerPoint.Presentation oPresentation = Globals.ThisAddIn.Application.ActivePresentation;

        foreach (PowerPoint.Slide oSlide in oPresentation.Slides)
        {
            //for (int iTag = 1; iTag <= oSlide.Tags.Count; iTag++)
            //{
            //    oSlide.Tags.Delete(oSlide.Tags.Name(iTag));
            //}

            for (int iTag = 1; iTag < 50; iTag++)
            {
                oSlide.Tags.Add("Tag_" + iTag.ToString(), "Tag Value " + iTag.ToString());
            }
        }
    }

标签: performancevstopowerpoint

解决方案


推荐阅读