gpt4 book ai didi

vba - 使用 visual studio 宏写入当前文档非常慢,建议加速?

转载 作者:行者123 更新时间:2023-12-02 07:08:11 25 4
gpt4 key购买 nike

一般来说,我对 Visual Studio 的速度没有任何提示,但如果我编写一个写出大约 100 行代码的宏,则需要 1-2 分钟才能完成。

这听起来不对。还有其他更方便的代码块编写方法吗?

一方面,我注意到它填满了撤消缓冲区,就好像我只是用手输入文本一样。我可以模仿更快的复制/粘贴行为吗?

这是我试图测试我的案例的一个有点做作的例子:

Sub WriteManyLines()
DTE.Commands.Raise("{AA61C329-D559-468F-8F0F-4F03896F704D}", 2, Customin, Customout)
DTE.Commands.Raise("{AA61C329-D559-468F-8F0F-4F03896F704D}", 5, Customin, Customout)
Dim sb As New StringBuilder()

For i As Integer = 1 To 100
sb.AppendFormat("public string Method{0:000}() {{ return ""Method{0:000}""; }}", i)
sb.AppendLine()
Next i
DTE.ActiveDocument.Selection.Text = sb.ToString()
End Sub

最佳答案

此 API 非常具有欺骗性,因为您似乎正在用 StringBuilder 的实际结果替换所选文本。或者简而言之,复制/粘贴。但您真正要做的是输入 StringBuilder 的结果(这就是为什么您看到撤消缓冲区填满数据的原因)。

这种类型的行为对于来自 DTE 命名空间的大部分编辑体验都是正确的。如果你对深奥的细节感兴趣,我前段时间写了一篇关于这个一般问题的博客经验。

为了修复它,尽管您会想要放弃 DTE 并开始使用 IVsTextLinesITextBuffer(后者是首选,因为它是较新的托管 API)。要退出 DTE,您应该能够执行以下命令

var vsTextLines = DTE.ActiveDocument.Object("TextDocument") as IVsTextLines;

IVsTextLines 上的编辑将直接进入缓冲区并避免打字的开销。

如果您想完全避免 DTE 和 COM,您可以使用 IVsEditorAdaptersFactoryService 从 COM 层映射到新的 2010 托管 API。此接口(interface)通常通过 MEF 查询,但我相信您也可以使用 IServiceProvider(DTE 实现)并对其执行 QueryService 调用。

关于vba - 使用 visual studio 宏写入当前文档非常慢,建议加速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com