Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用KeyValuePair的KeyValuePair字典的性能是否比使用T字典的性能差?_C#_Performance_List_Dictionary_Keyvaluepair - Fatal编程技术网

C# 使用KeyValuePair的KeyValuePair字典的性能是否比使用T字典的性能差?

C# 使用KeyValuePair的KeyValuePair字典的性能是否比使用T字典的性能差?,c#,performance,list,dictionary,keyvaluepair,C#,Performance,List,Dictionary,Keyvaluepair,我需要保留一个颜色/浮动/浮动三元组的列表和字典。我不是用三个属性定义一个很小的类(myClass.Color,myClass.FloatValue1,myClass.FloatValue2),而是简单地使用: List<KeyValuePair<Color, KeyValuePair<float, float>>> myList; Dictionary<Color,KeyValuePair<float,float>> myDict;

我需要保留一个颜色/浮动/浮动三元组的列表和字典。我不是用三个属性定义一个很小的类(
myClass.Color,myClass.FloatValue1,myClass.FloatValue2
),而是简单地使用:

List<KeyValuePair<Color, KeyValuePair<float, float>>> myList;
Dictionary<Color,KeyValuePair<float,float>> myDict; 
除了看起来有点奇怪的访问,我在这里有没有受到任何性能的影响?有没有理由相信上面这本词典的性能不如

Dictionary<Color,myClass> myDict;
字典myDict;

或者将上面的列表传递给LINQ查询的性能不如
列表

您应该注意的唯一区别是
KeyValuePair
不是类。这是一个结构。这意味着当你传递它时,它的行为会有所不同。这可能不重要,但你应该记住这一点。您还应该记住,
KeyValuePair
是不可变的,因此一旦创建,就不能更改它。您可以使用不同的键/值创建一个新的


你可能应该重新考虑你的设计。无论是引入您自己的简单POCO,还是使用
Tuple
似乎都比usign
KeyValuePair
好,因为您的数据实际上没有任何键值关系。这只是一组要一起处理的值
Tuple
就是为此而设计的。

您应该注意的唯一区别是,
KeyValuePair
不是一个类。这是一个结构。这意味着当你传递它时,它的行为会有所不同。这可能不重要,但你应该记住这一点。您还应该记住,
KeyValuePair
是不可变的,因此一旦创建,就不能更改它。您可以使用不同的键/值创建一个新的


你可能应该重新考虑你的设计。无论是引入您自己的简单POCO,还是使用
Tuple
似乎都比usign
KeyValuePair
好,因为您的数据实际上没有任何键值关系。这只是一组要一起处理的值<代码>元组就是为此而设计的。

Dictionary@JonSkeet是的,我在一台远离我代码的电脑上打字。我想你明白了,tho;我没有创建类,而是使用了双KVP对。是的,我把颜色和两个浮点值联系起来。这两个浮点值相关吗?为此创建自己的结构或类比使用KeyValuePair感觉更好。一般来说,在合适的地方问一个问题是一个好主意——输入不会编译的代码不会很好地利用任何人的时间,除非你问的是编译失败的问题。修复了列表和Dict定义。对。你为什么既有字典又有清单?(即使您需要该列表来维持顺序,是否有任何理由不将其作为颜色列表,然后在字典中查找颜色?
Dictionary@JonSkeet是的,我在一台远离我代码的电脑上打字。我想你明白了,tho;我没有创建类,而是使用了双KVP对。是的,我把颜色和两个浮点值联系起来。这两个浮点值相关吗?为此创建自己的结构或类比使用KeyValuePair感觉更好。一般来说,在合适的地方问一个问题是一个好主意——输入不会编译的代码不会很好地利用任何人的时间,除非你问的是编译失败的问题。修复了列表和Dict定义。对。你为什么既有字典又有清单?(即使您需要列表来维持顺序,是否有任何理由不将其作为颜色列表,然后在字典中查找颜色?)。但它仍然比KVP好,因为您的数据没有键值关系。所以。。。现在我已经确定了定义。。。有什么性能问题我应该关心吗?没有,我看不到。担心这一点而不实际看到任何问题似乎是过早的优化。元组不也是不变的吗?是的,它是不变的。但它仍然比KVP好,因为您的数据没有键值关系。所以。。。现在我已经确定了定义。。。有什么性能问题我应该关心吗?没有,我看不到。在没有看到任何问题的情况下担心这一点似乎是过早的优化。
Dictionary<Color,myClass> myDict;