首页 > 解决方案 > 哪个更快:String、BigInteger 或 Guid 用于字典键?

问题描述

我一直在尝试使用以 GUID 作为键的字典来构建实体数据库,我只想知道哪个更快,或者与其他相比占用更少的内存。

以下是具有不同 Key 类型的字典:

细绳

public Dictionary<string, Object> unityObjects;

图形用户界面

public Dictionary<System.Guid, Object> unityObjects;

大整数

public Dictionary<BigInteger, Object> unityObjects;

字典键是使用 System.Guid 生成的:

Guid guid = Guid.NewGuid();

// Using string dictionary
unityObjects.Add(guid.ToString(), myObj);

// Using GUID dictionary
unityObjects.Add(guid, myObj);

// Using BigInteger dictionary
BigInteger bigInt = new BigInteger(guid.ToByteArray());
unityObjects.Add(guid, myObj);

或者我应该使用带有 Int32 或 Int64 的较小唯一标识符而不是 GUID?(类似于下面的代码)

System.Random rng = new System.Random();

byte[] buf = new byte[8];
rng.NextBytes(buf);
long longRand = BitConverter.ToInt64(buf, 0);

// A GUID with Int64 data type
long guid = (System.Math.Abs(longRand % (long.MaxValue - 0)) + 0);

标签: c#.netdictionaryunity3dguid

解决方案


显然,数据类型越小,速度就越快。但是,为了让您的字典具有唯一标识符,使用 GUID 的作用不止一种。当然它有点慢,但它保证是唯一的,并且仅用于此目的。任何看到 GUID 的人都会知道它为什么存在 + 您在性能方面付出的代价通常可以忽略不计,并且不会对整体性能产生太大影响。

例如,决定 GUID 和 int 的关键因素是您是否需要数据库实体的通用唯一性。如果不是,那么您对原始类型也同样适用。


推荐阅读