改善智能艺术的MS Office互操作性能

时间:2014-05-13 15:25:26

标签: c# performance tree ms-office office-interop

我使用MS Office互操作来创建内部数据结构的可视化。数据结构像树,我使用相应的智能艺术。这就是我创造智能艺术的方式:

Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add();

oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape;
var smartArt = oDoc.Shapes.AddSmartArt(oDoc.Application.SmartArtLayouts[98], 0, 0, 700, 450).SmartArt;
var root = smartArt.Nodes.Add();
var parent = root.ParentNode;
root.Promote();
//Deletes nodes that have been created by default
DeleteTree(parent); 
//Fills the smart art node with the data of my internal structure
FillNode(root, myInternalRoot); 


void FillNode(SmartArtNode saNode, InternalNode node)
{                                    
    foreach (var c in node.Children)
    {
        FillNode(saNode.AddNode(MsoSmartArtNodePosition.msoSmartArtNodeBelow), c);
    }
}

此代码成功创建了可视化。但是,我插入树中的节点越多,创建的速度就越慢。第一个节点非常快,但是你可以看到它们越来越慢。一个包含大约100个节点的小树需要大约45秒才能构建。更大的树木需要更多的时间。

我认为原因是Word的布局算法。它可能在每次添加新节点时执行。有没有办法改善表现?我在WinForms中想到类似SuspendLayout的东西。种类:

DontTryToLayout();
AddNodes();
LayoutNow();

我还尝试在创建智能艺术后设置oWord.Visible。但这没有用。

以下是已创建树的屏幕截图:

Tree Visualization

0 个答案:

没有答案