Winforms 对于长文本(2000个字符),工具提示的运行速度非常慢

Winforms 对于长文本(2000个字符),工具提示的运行速度非常慢,winforms,performance,tooltip,limit,Winforms,Performance,Tooltip,Limit,我们需要使用内置的WinForms tooltip控件为其中一个控件显示很长的工具提示(约4000个字符)。但是如果我们这样做,当我们将鼠标指针放入目标控件以查看提示时,表单会冻结一两分钟。之后什么也没发生 我们试验并检测到,标准工具提示在大约2000个字符时开始工作得非常慢,而当我们增加字符数时,情况会变得更糟。这是一个已知的问题,是否有解决方法?请不要建议修剪提示文本-我们需要按原样显示字符串。如何使用另一个工具提示,即?当您将文本字符串指定给工具提示时,如何使用另一个工具提示,即?,绘图过

我们需要使用内置的WinForms tooltip控件为其中一个控件显示很长的工具提示(约4000个字符)。但是如果我们这样做,当我们将鼠标指针放入目标控件以查看提示时,表单会冻结一两分钟。之后什么也没发生


我们试验并检测到,标准工具提示在大约2000个字符时开始工作得非常慢,而当我们增加字符数时,情况会变得更糟。这是一个已知的问题,是否有解决方法?请不要建议修剪提示文本-我们需要按原样显示字符串。

如何使用另一个工具提示,即?

当您将文本字符串指定给
工具提示时,如何使用另一个工具提示,即?

,绘图过程的一部分包括调用
USP10.dll
,它处理屏幕上字符的Unicode布局。当程序冻结时,我通过查看堆栈跟踪可以看到这一点。对于长字符串,此布局的性能非常糟糕

禁用应用程序的视觉样式(注释掉
EnableVisualStyles()
)修复了问题-工具提示立即显示,尽管这不是最佳解决方案


我一直在寻找,发现这表明问题可能与需要换行的长字符串布局有关。通过在工具提示文本中插入换行符,我发现字符串立即显示。因此,如果您可以手动确定在何处插入换行符,
工具提示
应该会快速显示。

当您为
工具提示
指定一个文本字符串时,绘图过程的一部分涉及调用
USP10.dll
,该函数处理屏幕上字符的Unicode布局。当程序冻结时,我通过查看堆栈跟踪可以看到这一点。对于长字符串,此布局的性能非常糟糕

禁用应用程序的视觉样式(注释掉
EnableVisualStyles()
)修复了问题-工具提示立即显示,尽管这不是最佳解决方案


我一直在寻找,发现这表明问题可能与需要换行的长字符串布局有关。通过在工具提示文本中插入换行符,我发现字符串立即显示。因此,如果您可以手动确定在何处插入换行符,
工具提示
应该会快速显示。

我尝试过显示超过4500个字符的工具提示,它会立即显示,不会冻结。你能发布一些代码来重现这个问题吗?@endofzero,创建一个全新的WinForms项目。将复选框和工具提示控件放置在窗体上。在表单的加载事件中添加一条类似于
toolTip1.SetToolTip(复选框1,“foooooo…”)的语句
。启动它并将鼠标指针置于复选框内。测试环境:Win7 x64、.NET 4.0,VS 2010。我尝试过显示超过4500个字符的工具提示,它会立即显示,不会冻结。你能发布一些代码来重现这个问题吗?@endofzero,创建一个全新的WinForms项目。将复选框和工具提示控件放置在窗体上。在表单的加载事件中添加一条类似于
toolTip1.SetToolTip(复选框1,“foooooo…”)的语句
。启动它并将鼠标指针置于复选框内。测试环境:Win7 x64、.NET 4.0和VS 2010。我们不需要这种扩展的HTML呈现功能。我们需要的只是显示纯文本作为提示。使用另一个可能不受支持的第三方库是向自己的项目添加潜在问题的一个步骤:)我们不需要这种扩展的HTML呈现功能。我们需要的只是显示纯文本作为提示。使用另一个可能不受支持的第三方库是向自己的项目添加潜在问题的步骤:)