performance - 每次运行代码都会变慢 (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());
}
}
}