1 回答
TA贡献1785条经验 获得超8个赞
好的...我已经能够获得添加文本所需的时间,最多需要 133 毫秒,这是我发现的最高时间。这是一个轻微的抖动;如果我添加 50K 个字符,则需要大约 1000 毫秒,这很明显,但考虑到字符数,这并不坏。
为了执行测试,我首先创建了一个视图: ProgressBar检测 UI 冻结/抖动。 TextBlock以毫秒为单位显示添加文本所需的时间。 Button开始添加文本。 TextBox将文本添加到。
主页.xaml
<Page x:Class="Question_Answer_UWPApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ProgressBar Name="progressBarAddingText"
IsIndeterminate="True" />
<TextBlock Name="textBlockAddingTextTime" />
<Button Content="Add Text"
Click="ButtonClick" />
<TextBox Name="textBoxAddingText"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ScrollViewer.VerticalScrollBarVisibility="Auto"
TextWrapping="Wrap"
Margin="0,0,0,70" />
</StackPanel>
</Page>
主页.xaml.cs
using System.Diagnostics;
using System.Text;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
namespace Question_Answer_UWPApp
{
public sealed partial class MainPage : Page
{
public static Stopwatch stopwatch = new Stopwatch();
public MainPage()
{
InitializeComponent();
}
public async void AddTextAsynchronously()
{
var text = await Task.Run(() =>
{
var stringBuilder = new StringBuilder();
for (int i = 0; i < 5000; i++)
stringBuilder.Append("X");
return stringBuilder.ToString();
});
stopwatch.Start();
textBoxAddingText.Text = text;
stopwatch.Stop();
textBlockAddingTextTime.Text = $"{stopwatch.ElapsedMilliseconds.ToString()} milliseconds";
}
private void ButtonClick(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
AddTextAsynchronously();
}
}
}
在这个测试中,我得到了大约 133 毫秒,但是当我放置StringBuilder外部Task并使用Taskjust 来构建StringBuilder(基本上让我说它.Text = stringBuilder.ToString()需要大约 10 毫秒。这意味着这StringBuilder不是瓶颈。我不相信将文本添加到TextBox也是您的瓶颈。
通过这个测试,我觉得你应该在其他地方寻找你的瓶颈。这应该可以安全地回答向TextBoxvia 代码添加文本并不耗时的问题。
- 1 回答
- 0 关注
- 221 浏览
添加回答
举报