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

时间:2016-11-25 22:11:49

标签: 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 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条记录。

1 个答案:

答案 0 :(得分:4)

您应该使用string.Split(char delimeter)方法。它比你对字符串的操作要快得多。字符串是不可变的,这个特性会产生性能问题。在每个操作中,分配新的存储器。将您的方法更改为:

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

请详细了解How to improve string concatenation performance in Visual C#

相关问题