gpt4 book ai didi

c# - 使用 DotTrace 问题进行内存分析

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:08 25 4
gpt4 key购买 nike

我在我的应用程序上运行了 dotTrace(它有一些问题)。

IntPtr System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr, IntPtr, Int32, IntPtr, IntPtr)

Void System.Windows.Forms.UnsafeNativeMethods.WaitMessage()

是出现的两个主要功能,占用了大约 94% 的应用时间。

由于我不知道这两个函数是什么,所以我逐行检查了我的代码。它平稳高效地运行,直到它挂起。 “newFrm.Show()”。

newFrm 只包含一个文本框。我加载到文本框中的文件越大(这是一个记事本程序),所需的时间就越长。现在通常这是有道理的,但对于一个 167 kB 的文件来说大约需要 30 秒。

现在我不知道该怎么办。当您加载文本文件并尝试调整包含文本文件的窗口大小时,它运行得非常慢/停止运行。

然后我意识到它只是在努力打开内部有一长串十六进制的文本文件(即)“XX-XX-XX-”等。对于其他类似大小的文件,它很难调整大小,但在几秒钟。

这与文本框属性有关吗?我已将其设置为多行并将最大字符数设置为 0(如此无限制)。

我该如何解决这个问题?有什么方法可以让我看到在这些函数中调用了什么?

最佳答案

探查器显示大多数执行发生在那些 Windows API 调用中是正常的。 CallWindowProc() 运行控件的默认消息处理程序,您正在测量 Windows 内置的 native 编辑框控件处理文本文件所需的时间。 WaitMessage() 旋转,等待来自 Windows 的消息,表明发生了一些有趣的事情。这使得分析 GUI 代码变得困难,你必须将你编写的代码提升到单元测试风格的程序中。在这里不切实际,您没有编写任何占用所有 CPU 周期的代码。

您的问题是 TextBox 不是一个很好的文本编辑器。它没有您在成熟的编辑器中发现的任何优化。请务必关闭 WordWrap 属性,这特别昂贵。并且确保不要从文件中逐行填充 TextBox,这非常很慢,因为 native 控件必须不断地重新分配其缓冲区。使用 File.ReadAllText() 或使用 StringBuilder,然后分配文本。

类似于开源的东西 ScintillaNET做得更好。

关于c# - 使用 DotTrace 问题进行内存分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2533611/

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