c# - 哪个更快: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);
解决方案
显然,数据类型越小,速度就越快。但是,为了让您的字典具有唯一标识符,使用 GUID 的作用不止一种。当然它有点慢,但它保证是唯一的,并且仅用于此目的。任何看到 GUID 的人都会知道它为什么存在 + 您在性能方面付出的代价通常可以忽略不计,并且不会对整体性能产生太大影响。
例如,决定 GUID 和 int 的关键因素是您是否需要数据库实体的通用唯一性。如果不是,那么您对原始类型也同样适用。
推荐阅读
- javascript - React 是否保证 `props` 对象引用保持稳定?
- android - 我们如何在 React Native 中清除 url 缓存?
- jquery - 如何根据另一个下拉列表更改下拉列表值
- php - Codeigniter:404 页面未找到:/index
- azure-data-factory - 迭代 Azure 数据工厂中的每个文件夹
- elasticsearch - 内部对象的术语聚合和检索桶元数据
- javascript - 单元测试用例模拟对象功能
- bash - 如何创建多行卷曲字符串,变量包含在单引号和双引号中?
- linux - 如果在 csv 文件中找到匹配项,如何获取整个记录
- sql - 如何在 Firebird 中使用声明语句嵌套匿名块?