我有一个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)
)。
任何想法为何效率低下?
答案 0 :(得分:1)
每次添加到字符串时,都必须创建一个新字符串并销毁较慢的旧字符串。使用 tac [OPTION]... [FILE]...
代替它只会添加到字符串构建器而不是创建新的字符串构建器。
StringBuilder
https://docs.microsoft.com/en-us/dotnet/standard/base-types/stringbuilder