对于大型矩阵,C#将矩阵转换为String很慢

时间:2018-02-10 13:30:57

标签: c# serialization tostring

我有一个Matrix类,它提供了一个方法ToString(),用于序列化代码。

public override string ToString()                           
// Function returns matrix as a string
// e.g. "Rows=3,Columns=3,Data= 1.00 0.50 0.75 | 0.50 1.00 0.25 | 0.75 0.25 1.00 |"
{
    string s = "Rows=" + rows.ToString() + ",Columns=" + cols.ToString() + ",Data= ";
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++) s += String.Format("{0:G17}", mat[i, j]) + " ";
        s += "| ";
    }
    return s;
}

我的用例是一个包含10,000多行和2列的矩阵。执行大约需要10秒钟,这太慢了。有更有效的方法吗?注意我需要完全双精度序列化。

感觉代码效率低,因为当反序列化时反向操作需要不到一秒钟(这在循环中使用Convert.ToDouble(string))。

任何想法为何效率低下?

1 个答案:

答案 0 :(得分:1)

每次添加到字符串时,都必须创建一个新字符串并销毁较慢的旧字符串。使用 tac [OPTION]... [FILE]... 代替它只会添加到字符串构建器而不是创建新的字符串构建器。

StringBuilder

https://docs.microsoft.com/en-us/dotnet/standard/base-types/stringbuilder