【发布时间】:2017-02-07 11:37:08
【问题描述】:
我写了一些 WPF 编辑器,用来显示文本。
但是文本存储在Stream。
所以,这里是 XAML 代码:
<TextBox Text="{Binding ObjectViewModel.Text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
我将UpdateSourceTrigger 设置为PropertyChanged,因为用户可以在此编辑器中读写一些文本;
这里的代码读取和写入文本(作为流):
public String Text
{
get
{
var sr = new StreamReader(StreamObject.text, Encoding.UTF8, true);
return sr.ReadToEnd();
}
set
{
lock (_lockObject)
{
var str = value;
var textStream = new MemoryStream();
using (var writer = new BinaryWriter(textStream, Encoding.UTF8, true))
{
writer.Write(Encoding.UTF8.GetBytes(str));
}
textStream.Position = 0;
StreamObject.text = null;
StreamObject.text = textStream;
textStream.Close();
}
}
}
因此,当用户输入新的字码时,写入流新数据(清除旧流并创建新流)。
但它的性能很慢。
我应该使用async(以某种方式)还是其他方法来提高性能?
我知道,可以使用LostFocus 属性,但这样用户应该失去TextBox 的焦点。
【问题讨论】:
-
为什么首先将文本存储在 Stream 中?
-
@Clemens,它存储在 DB。按设计
-
然后在将其存储到数据库之前对其进行一次转换,而不是在每次击键时进行转换。