从字符串中提取子字符串(直到C#中的分隔符)的最快方法是什么?

从字符串中提取子字符串(直到C#中的分隔符)的最快方法是什么?,c#,string,parsing,optimization,C#,String,Parsing,Optimization,因此,我正在解析一个大文件,我需要优化我的字符串提取过程(目前程序甚至需要1-2分钟才能完成对文件的解析)。这是调试和进一步开发软件的杀手 示例程序 string sample = "First Line\nSecond Line\nThird Line"; string extracted_string = ExtractString(ref sample, "\n"); // extracted_string should hold "First Line" // sample should

因此,我正在解析一个大文件,我需要优化我的字符串提取过程(目前程序甚至需要1-2分钟才能完成对文件的解析)。这是调试和进一步开发软件的杀手

示例程序

string sample = "First Line\nSecond Line\nThird Line";
string extracted_string = ExtractString(ref sample, "\n");
// extracted_string should hold "First Line"
// sample should hold "Second Line\nThird Line";
ExtractString函数

function string ExtractString(ref string original, string delimiter)
{
    int index_of = original.IndexOf(delimiter);
    string result = "";

    if(index_of >= 0)
    {
       result = original.Substring(0, index_of);

       // Remove string & delimiter from original
       original = original.Remove(0, index_of + 1);
    }
    else
    {
       result = original;
       original = "";
    }

    return result;
}
我有没有其他方法来加快这个过程。。。。到目前为止,处理每条记录大约需要50-80毫秒,大约有6000-7000条记录。

您应该使用这种方法。它比字符串上的操作快得多。字符串是不可变的,此特性会导致性能问题。在每次操作中,都会分配新的内存。将您的方法更改为:

string sample = "First Line\nSecond Line\nThird Line";
var extracted_strings = sample.Split('\n');
请阅读更多有关您应该使用的方法的信息。它比字符串上的操作快得多。字符串是不可变的,此特性会导致性能问题。在每次操作中,都会分配新的内存。将您的方法更改为:

string sample = "First Line\nSecond Line\nThird Line";
var extracted_strings = sample.Split('\n');

请阅读更多关于

你试过Srange.S分裂吗?也许考虑使用StringBuilder?在
StringBuilder
中操作字符串应该快得多。您真的需要从原始字符串中删除找到的字符串吗?如果您不需要修剪原始字符串,那么您可以将最后找到的换行符的索引作为下一个子字符串剪辑的起始点,或者使用完全不同的方法来处理您的文件串生成器,因为我需要能够搜索字符串。在
StringBuilder
中操作字符串应该快得多。您真的需要从原始字符串中删除找到的字符串吗?如果不需要修剪的原始字符串,则可以传递最后找到的换行符的索引以用作下一个子字符串剪辑的起点,或者使用完全不同的方法来处理文件字符串生成器将无法工作,因为我需要能够搜索字符串。