c# - 从字符串中提取子字符串到 C# 中的定界符的最快方法是什么?

标签 c# string parsing optimization

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

示例程序

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.Split(char delimeter)方法。它比您对字符串的操作快得多。 String 是不可变的,这个特性会产生性能问题。在每个操作中分配新的内存。将您的方法更改为:

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

请阅读更多关于 How to improve string concatenation performance in Visual C# 的信息

关于c# - 从字符串中提取子字符串到 C# 中的定界符的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40812834/

相关文章:

java - 根据关键字重新排列日志文件

forms - 使用绑定(bind)解析数组表单元素

java - 如何实现epsilon转换?

python - 值错误: No JSON object could be decoded for a valid JSON file

c# 如果记录存在则更新否则插入新记录

c# - 如何动态使用 SqlFunctions.PatIndex

c# - 消息框和单元测试

c# - WCF 服务可以替代 TCPListener 的功能吗?

Delphi Unicode 字符串类型直接存储在其地址(或 "Unicode ShortString")

php - 需要使用 php 字符串创建一个 php 数组,该字符串的结构为 javascript 数组