什么是优化代码

时间:2012-10-11 18:41:35

标签: c# c#-4.0

我有string1, string2,...,stringn 和每个字符串的值是

string1 = "s1k1-s1k2-s1k3-....-s1kn | s1v1-s1v2-s1v3-....-s1vn";

string2 = "s2k1-s2k2-s2k3-....-s2kn | s2v1-s2v2-s2v3-....-s2vn";

                .............

stringn = "snk1-snk2-snk3-....-snkn | snv1-snv2-snv3-....-snvn";

现在,我想使用键和值填充Dictionary<string, string>(),如下所示。

var dict = new Dictionary<string, string>();
dict.Add(s1k1, s1v1);
dict.Add(s1k2, s1v2);
         :
         :
dict.Add(snkn, snvn);

以下是我的示例代码:

        string string1 = "s1k1-s1k2-s1k3-s1kn|s1v1-s1v2-s1v3-s1vn";
        string string2 = "s2k1-s2k2-s2k3-s2kn|s2v1-s2v2-s2v3-s2vn";
        string stringn = "snk1-snk2-snk3-snkn|snv1-snv2-snv3-snvn";

        var dict = new Dictionary<string, string>();

        new List<string> { string1, string2, stringn }.ForEach(str =>
        {
            var strSplit = str.Split('|');
            var strKeys = strSplit[0].Split('-');
            var strValues = strSplit[1].Split('-');
            strKeys.Zip(strValues, (key, value) => new { key, value }).ToList().ForEach(filed => dict.Add(filed.key, filed.value));
        });

是否可以优化此代码?

1 个答案:

答案 0 :(得分:0)

在我看来,内存使用方面最昂贵的操作是strSplit = str.Split('|')。它会创建两个大字符串,在获得strKeysstrValues后直接转到垃圾。之后,垃圾收集器将收集所有这些垃圾字符串,这将对性能产生负面影响。

strKeysstrValues字符串数组包含将在dict中使用的字符串,因此这里的内存丢失很小。

要优化内存使用,您必须遍历str char-by-char并使用StringBuilder类创建键和值。在这种情况下,内存丢失将是最小的,但是您的代码将不像现在那样干净。所以,只有当代码的这一部分成为应用程序中真正的性能瓶颈时,我才推荐这样的解决方案。