Зачем нужен StringBuilder?

В интернете часто натыкаюсь на код с использованием StringBuildera, типа такого:

        private string AttributesToString(FileAttributes attributes)
        {
            StringBuilder str = new StringBuilder(9);

            if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
                str.Append('R');
            if ((attributes & FileAttributes.Archive) == FileAttributes.Archive)
                str.Append('A');
            if ((attributes & FileAttributes.System) == FileAttributes.System)
                str.Append('S');
            if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                str.Append('H');
            if ((attributes & FileAttributes.Normal) == FileAttributes.Normal)
                str.Append('N');
            if ((attributes & FileAttributes.Directory) == FileAttributes.Directory)
                str.Append('D');
            if ((attributes & FileAttributes.Offline) == FileAttributes.Offline)
                str.Append('O');
            if ((attributes & FileAttributes.Compressed) == FileAttributes.Compressed)
                str.Append('C');
            if ((attributes & FileAttributes.Temporary) == FileAttributes.Temporary)
                str.Append('T');

            return str.ToString();
        }

если переписать так:

        private string AttributesToString2(FileAttributes attributes)
        {
            string str = string.Empty;

            if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
                str += "R";
            if ((attributes & FileAttributes.Archive) == FileAttributes.Archive)
                str += "A";
            if ((attributes & FileAttributes.System) == FileAttributes.System)
                str += "S";
            if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                str += "H";
            if ((attributes & FileAttributes.Normal) == FileAttributes.Normal)
                str += "N";
            if ((attributes & FileAttributes.Directory) == FileAttributes.Directory)
                str += "D";
            if ((attributes & FileAttributes.Offline) == FileAttributes.Offline)
                str += "O";
            if ((attributes & FileAttributes.Compressed) == FileAttributes.Compressed)
                str += "C";
            if ((attributes & FileAttributes.Temporary) == FileAttributes.Temporary)
                str += "T";

            return str;
        }

Работает аналогично. Только быстрее, наверное :thinking:
Зачем нужен этот StringBuilder?

А разве в его документации не написано?)
https://docs.microsoft.com/en-us/dotnet/api/system.text.stringbuilder?view=net-6.0#the-string-and-stringbuilder-types

В дотнете строки неизменяемые, при += "А" создается новая копия, а не просто записывается символ в ячейку массива и т.п.
StringBuilder по идее более эффективный. (ну это конечно заметно только при большом количестве операций со строками)

А, блин, точно :man_facepalming: