gpt4 book ai didi

c# - 在 C# 中增强 streamwriter 的性能

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

在我的程序中,我需要编写大型文本文件(~300 mb),文本文件包含由空格分隔的数字,我正在使用此代码:

TextWriter guessesWriter = TextWriter.Synchronized(new StreamWriter("guesses.txt"));

private void QueueStart()
{
while (true)
{
if (writeQueue.Count > 0)
{
guessesWriter.WriteLine(writeQueue[0]);
writeQueue.Remove(writeQueue[0]);
}
}
}

private static void Check()
{
TextReader tr = new StreamReader("data.txt");

string guess = tr.ReadLine();
b = 0;
List<Thread> threads = new List<Thread>();
while (guess != null) // Reading each row and analyze it
{
string[] guessNumbers = guess.Split(' ');
List<int> numbers = new List<int>();
foreach (string s in guessNumbers) // Converting each guess to a list of numbers
numbers.Add(int.Parse(s));

threads.Add(new Thread(GuessCheck));
threads[b].Start(numbers);
b++;

guess = tr.ReadLine();
}
}

private static void GuessCheck(object listNums)
{
List<int> numbers = (List<int>) listNums;

if (!CloseNumbersCheck(numbers))
{
writeQueue.Add(numbers[0] + " " + numbers[1] + " " + numbers[2] + " " + numbers[3] + " " + numbers[4] + " " + numbers[5] + " " + numbers[6]);
}
}

private static bool CloseNumbersCheck(List<int> numbers)
{
int divideResult = numbers[0]/10;
for (int i = 1; i < 6; i++)
{
if (numbers[i]/10 != divideResult)
return false;
}
return true;
}

文件 data.txt 包含这种格式的数据:(点表示遵循相同逻辑的更多数字)

1 2 3 4 5 6 1
1 2 3 4 5 6 2
1 2 3 4 5 6 3
.
.
.
1 2 3 4 5 6 8
1 2 3 4 5 7 1
.
.
.

我知道这不是很有效,我正在寻找一些关于如何让它更快的建议。如果您晚上知道如何比 .txt 更有效地保存大量数字,我将不胜感激。

最佳答案

提高效率的一种方法是在输出流上使用更大的缓冲区。您使用的是默认值,这可能会给您 1k 的缓冲区,但如果缓冲区小于 64k,您将看不到最高性能。像这样打开你的文件:

new StreamWriter("guesses.txt", new UTF8Encoding(false, true), 65536)

关于c# - 在 C# 中增强 streamwriter 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718883/

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