我有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));
});
是否可以优化此代码?
答案 0 :(得分:0)
在我看来,内存使用方面最昂贵的操作是strSplit = str.Split('|')
。它会创建两个大字符串,在获得strKeys
和strValues
后直接转到垃圾。之后,垃圾收集器将收集所有这些垃圾字符串,这将对性能产生负面影响。
strKeys
和strValues
字符串数组包含将在dict
中使用的字符串,因此这里的内存丢失很小。
要优化内存使用,您必须遍历str
char-by-char并使用StringBuilder
类创建键和值。在这种情况下,内存丢失将是最小的,但是您的代码将不像现在那样干净。所以,只有当代码的这一部分成为应用程序中真正的性能瓶颈时,我才推荐这样的解决方案。