Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提高字符串生成器的性能_C#_.net - Fatal编程技术网

C# 提高字符串生成器的性能

C# 提高字符串生成器的性能,c#,.net,C#,.net,通过使用线程堆栈上分配的char[]使用指针按字符构建字符串,可以优化扩展的StringBuilder.Append()操作吗 unsafe { const Int32 width = 1024; Char* msg = stackalloc Char[width]; Int32 index = 0; property = Environment.MachineN

通过使用线程堆栈上分配的
char[]
使用指针按字符构建字符串,可以优化扩展的
StringBuilder.Append()
操作吗

        unsafe
        {
            const Int32 width = 1024;

            Char* msg = stackalloc Char[width];

            Int32 index = 0;

            property = Environment.MachineName;

            for (Int32 i = 0; i < property.Length; i++)
                    msg[index++] = property[i];             

            return new String(msg, 0, width);
        }
不安全
{
常数Int32宽度=1024;
Char*msg=stackalloc Char[width];
Int32指数=0;
属性=Environment.MachineName;
for(Int32 i=0;i

与使用
StringBuilder
相比,这提供了大约25%的改进,但结果并不令人满意。

如果您对最终字符串的大小有一个预先的想法(就像您所做的那样),您可以使用该容量构建
StringBuilder
,因此,它花费更少的时间重新分配空间:

var sb = new StringBuilder();   
// capacity 16, will expand as needed

var sb30000 = new StringBuilder(30000);   
// capacity 30000, will not need to expand until that length is passed

这可能有点帮助。

@Nuffin-Umm,也许是第一行?只需要一个问号。然而,这个问题似乎与第二行不一致,也许OP想要一个新的版本。您是否通过实验测量了使用StringBuilder.Append对您的应用程序来说是一个瓶颈,并且您确实需要降低到指针和不安全代码级别?或者,您只是过早地试图在没有充分理由的情况下节省几个CPU周期?StringBuilder可以有一个初始容量,这可能会给您带来与字符数组相同的好处,您是否尝试过使用不同的初始容量?基本上就是这样-重新分配确实需要时间。在那之后,我会说,你必须有非常特殊的代码,才能真正发挥作用。