FRFRough 发表于 2022-7-13 11:58

C# StringBuilder和MemoryStream性能问题

求助大佬

操作大量要修改的字符串可以使用StringBuilder,也可以使用MemoryStream结合Streamwriter。
哪个性能更快一些呢?

goldli 发表于 2022-7-13 12:25

for example ?

FRFRough 发表于 2022-7-13 13:18

goldli 发表于 2022-7-13 12:25
for example ?

比如这样的代码
    public class MsExample
    {
      
      MemoryStream ms;

      StreamReader sr;

      long readEnd = 0;

      StreamWriter sw;

      public MsExample()
      {
            ms = new MemoryStream();
            sr = new StreamReader(ms);
            sw = new StreamWriter(ms);
      }

      public void Write(string str)=> sw.Write(str);

      public string Read()
      {
            sw.Flush();
            readEnd = ms.Position;
            char[] buffer = new char;
            sr.Read(buffer, 0, (int)(readEnd));
            return new string(buffer);
      }

      public void Clear()
      {
            ms.Position = 0;
            readEnd = 0;
      }
    }

    public class SBExample
    {
      StringBuilder sb = new StringBuilder();

      public void Write(string str)=> sb.Append(sb);

      public string Read() => sb.ToString();

      public void Clear() => sb.Clear();
    }

FRFRough 发表于 2022-7-13 13:50

FRFRough 发表于 2022-7-13 13:18
比如这样的代码
    public class MsExample
    {


是这个public void Write(string str)=>sb.Append(str)
打错了

LogerLaw 发表于 2022-7-13 14:00

既然你有了示例代码就写个程序试验一下呗,每种方法循环执行上万次,输出运行时间

goldli 发表于 2022-7-13 14:15

stringBuilder, 这个用于频繁变化的字符串。
MemoryStream,一看就知道,这是一个流。 流会不断的变大。 所以,这个不是用来处理小型字符串的。
由于没有更明确的使用场景,没办法给出更有效的建议。

FRFRough 发表于 2022-7-13 15:34

LogerLaw 发表于 2022-7-13 14:00
既然你有了示例代码就写个程序试验一下呗,每种方法循环执行上万次,输出运行时间

GC干扰,时间难说的很

LogerLaw 发表于 2022-7-13 16:04

FRFRough 发表于 2022-7-13 15:34
GC干扰,时间难说的很

配合dotTrace工具分析
页: [1]
查看完整版本: C# StringBuilder和MemoryStream性能问题