我现在有一个词典,它使用string
作为键,GameObject
作为值。
字符串都是IP地址,所以它们不是很长。这是一个例子:
string ip = "192.68.137.1"
我知道数字比较比字符串快得多,而且我能够解析数据库服务器中的IP地址。
使用整数数组作为字典的KEY会更快吗?像这样:
int[] ip = { 192, 168, 137, 1 }
我正在检查字典是否定期包含某些值,并且还定期添加到字典中(通常至少每秒一次)。
我对此感到困惑的原因是因为我使用的字符串(IP地址' s)总是在那个长度附近,所以使用整数数组会有什么好处吗?如果字典每次必须循环4个数字,我不知道比字符串比较快多少。
答案 0 :(得分:6)
与以往一样,你应该测试表现,而不是猜测它或者让别人猜测。但是,有两件事要考虑:
uint
或IPAddress
作为密钥?这样您就不需要编写自己的EqualityComparer<int[]>
了。遗憾的是IPAddress
未实现IEquatable<IPAddress>
,但它似乎 正确覆盖Equals
/ GetHashCode
。我会考虑第一点,编写详细的基准测试,确定这是多么重要 - 如果你真的只是每秒查看一次,那么它很可能不重要所有 - 然后尝试各种选项。我只会放弃最简单的代码(如果你已经接收到IP地址那将是一个字符串),如果你能证明有明显的改进。
答案 1 :(得分:4)
我可能会使用IPAddress作为密钥。我假设(虽然你可以测试)它会对它的哈希值进行有效搜索,并且整个v4 / v6事件将由数据类型为你处理。
答案 2 :(得分:3)
您可以在词典中使用IPAdress类作为键。
从字符串创建的示例:
var ipAddressString = "192.68.137.1"
IPAddress address = IPAddress.Parse(ipAddressString)
这是一种更正确的方式。
资料来源:https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse(v=vs.110).aspx