1

我有一个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));
        });

是否可以优化此代码?

4

1 回答 1

0

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

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

要优化内存使用,您必须str逐个字符地遍历并使用StringBuilder类创建键和值。在这种情况下,内存损失将是最小的,但是您的代码不会像现在这样干净。因此,仅当这部分代码是您的应用程序中真正的性能瓶颈时,我才会推荐这种解决方案。

于 2012-10-19T09:31:15.363 回答