gpt4 book ai didi

c# - 将 int 作为文本流式传输到文件中而不创建字符串对象

转载 作者:行者123 更新时间:2023-11-30 23:12:31 25 4
gpt4 key购买 nike

我正在将一些文本流式传输到一个文件中。以下代码是用于演示该问题的 MCVE:

using (var fileStream = File.OpenWrite(@"d:\test.txt"))
{
using (var streamWriter = new StreamWriter(fileStream))
{
for (int i = 0; i < 20000000; i++)
{
streamWriter.Write("Just ");
streamWriter.Write(i);
streamWriter.Write(" example.\r\n");
}
}
}

如您所见,它不仅将字符串流式传输到文件中,还可以将整数流式传输到文件中。

不幸的是,Write(int) 方法似乎在数字上调用了ToString(),所以上面的代码创建了 20M 的字符串对象。这可以用像 dotMemory 这样的内存分析器来证明。这些字符串将被垃圾收集,但它们会导致垃圾收集器产生 577 MB 的吞吐量。

有没有办法在不创建临时字符串的情况下直接将整数(以人类可读的格式,而不是二进制)流式传输到文件中?

最佳答案

您可以使用递归一次完成一个数字:

void writeInt(StreamWriter w, int i)
{
if (i<0)
{
w.Write('-');
writeInt(w, -i);
}
else if (i>=10)
{
writeInt(w, i/10); // Write all but the last digit
w.Write((char)('0' + i%10)); // Write the last digit
}
else
{
w.Write((char)('0' + i)); // Write single digit number
}
}

对于给定的整数,这样调用它:

int i = 42;
streamWriter.Write("Just ");
writeInt(streamWriter, i);
streamWriter.Write(" example.\r\n");

关于c# - 将 int 作为文本流式传输到文件中而不创建字符串对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44057909/

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