Int数组作为Dictionary中的一个键VS一个字符串

Ben*_*end 2 c# string int dictionary unity-game-engine

我现在有一个字典,它使用一个string键作为键,一个GameObject作为值.

字符串都是IP地址,所以它们不是很长.这是一个例子:

string ip = "192.68.137.1"
Run Code Online (Sandbox Code Playgroud)

我知道数字比较比字符串快得多,我能够解析数据库服务器中的IP地址.

使用整数数组作为字典的KEY会更快吗?像这样:

int[] ip = { 192, 168, 137, 1 }
Run Code Online (Sandbox Code Playgroud)

我正在检查字典是否定期包含某些值,并且还定期添加到字典中(通常至少每秒一次).

我对此感到困惑的原因是因为我使用的字符串(IP地址)总是在那个长度附近,所以使用整数数组会有什么好处吗?如果字典每次必须循环4个数字,我不知道比字符串比较快多少.

Jon*_*eet 6

与以往一样,你应该测试性能而不是猜测它或者让别人猜测.但是,要考虑两件事:

  • 您已经显示了IPv4地址......那么IPv6呢?这肯定会使事情复杂化
  • IPv4地址实际上是4 个字节 ...那么为什么不将它转换为单个uintIPAddress作为密钥呢?这样你就不需要自己编写了EqualityComparer<int[]>.这是一个耻辱IPAddress没有实现IEquatable<IPAddress>,但它看起来确实覆盖Equals/ GetHashCode适当.

我会考虑第一点,编写详细的基准测试,确定这是多么重要 - 如果你真的只是每秒查看一次,它根本不可能重要 - 然后尝试各种选项.如果您能够展示经过验证的重大改进,我只会放弃最简单的代码(如果您已经接收到IP地址,那将是一个字符串).