gpt4 book ai didi

c# - 如何快速将非常大的文件呈现(不打开)到 UI 组件(TextBox)中

转载 作者:行者123 更新时间:2023-11-30 15:33:15 26 4
gpt4 key购买 nike

在谈论我的问题之前,我想澄清一下,这不是一个关于如何打开大文本文件的问题。

我已经做到了。这是一个 150MB 的 .txt 文件,我在 1 秒左右将其转储到字典对象中。在此之后,我想在 UI 组件中显示它。

我试过使用TextBox,但直到现在应用程序窗口还没有出现(我点击F5后已经5分钟了)......

所以问题是什么是显示大量字符的更好的 UI 组件(我的字典对象中有 393300 个元素)

谢谢

更新:

 private void LoadTermCodes(TextBox tb)
{
Stopwatch sw = new Stopwatch();
sw.Start();
StreamReader sr = new StreamReader(@"xxx.txt");
string line;
while ((line = sr.ReadLine()) != null)
{
string[] colums = line.Split('\t');
var id = colums[4];
var diagnosisName = colums[7];

if (dic.Keys.Contains(id))
{
var temp = dic[id];
temp += "," + diagnosisName;
dic[id] = temp;
}
else
{
dic.Add(id, diagnosisName);
}

//tb.Text += line + Environment.NewLine;
}

sw.Stop();
long spentTime = sw.ElapsedMilliseconds;

foreach (var element in dic)
{
tb.Text += element.Key + "\t" + element.Value + Environment.NewLine;
}

//tb.Text = "Eplased time (ms) = " + spentTime;
MessageBox.Show("Jie shu le haha~~~ " + spentTime);
}

最佳答案

您看到的长期运行问题可能是由于 c# 运行时处理字符串的方式所致。由于字符串是不可变的,因此每次您在其上调用 + 时都会将字符串和下一小部分复制到新的内存位置,然后将其返回。

这里有 Eric Lippert 的好几篇文章:Part 1Part 2这在幕后进行了解释。

相反,要停止所有这些复制,您应该使用 StringBuilder。这将对您的代码执行以下操作:

private void LoadTermCodes(TextBox tb)
{
Stopwatch sw = new Stopwatch();
sw.Start();
StreamReader sr = new StreamReader(@"xxx.txt");
string line;

// initialise the StringBuilder
System.Text.StringBuilder outputBuilder = new System.Text.StringBuilder(String.Empty);
while ((line = sr.ReadLine()) != null)
{
string[] colums = line.Split('\t');
var id = colums[4];
var diagnosisName = colums[7];

if (dic.Keys.Contains(id))
{
var temp = dic[id];
temp += "," + diagnosisName;
dic[id] = temp;
}
else
{
dic.Add(id, diagnosisName);
}
}

sw.Stop();
long spentTime = sw.ElapsedMilliseconds;

foreach (var element in dic)
{
// append a line to it, this will stop a lot of the copying
outputBuilder.AppendLine(String.Format("{0}\t{1}", element.Key, element.Value));
}

// emit the text
tb.Text += outputBuilder.ToString();

MessageBox.Show("Jie shu le haha~~~ " + spentTime);
}

关于c# - 如何快速将非常大的文件呈现(不打开)到 UI 组件(TextBox)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606522/

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