Kyl*_*son 3 c# guid newsequentialid sequential
我有一个C#应用程序,它为我插入表中的每一行生成一个顺序GUID.我希望插入的GUID是顺序的,但有时它们会破坏序列(以块为单位).
例:
这些GUID按插入顺序显示.
为什么这些"顺序"GUID是在如此大的序列中断的情况下创建的?
用于生成顺序GUID的代码:
class NativeMethods
{
[DllImport("rpcrt4.dll", SetLastError = true)]
public static extern int UuidCreateSequential(out Guid guid);
}
public static Guid CreateSequentialGuid()
{
const int RPC_S_OK = 0;
Guid guid;
int result = NativeMethods.UuidCreateSequential(out guid);
if (result == RPC_S_OK)
return guid;
else
return Guid.NewGuid(); //<--In debugging, this statement never runs.
}
Run Code Online (Sandbox Code Playgroud)
循环中使用的代码,用于将新GUID和信息插入表中:
Guid mySequentialGUID = CreateSequentialGuid();
string[] row = { item1,
item2,
item3,
sourceText,
encoding.ToString(),
mySequentialGUID.ToString()
};
var listViewItem = new ListViewItem(row);
myListView.Items.Add(listViewItem);
Run Code Online (Sandbox Code Playgroud)
编辑:请参阅此问题以了解顺序GUID:
我认为问题在于你假设"顺序"意味着"递增1".虽然您的示例显示有时会发生这种情况但文档中没有实际保证.我们可以争论"序列"的定义,或者说这个函数可能命名很差甚至是错误但是在一天结束时,根据文档,它看起来完全按照定义100%工作:
创建的GUID大于此函数先前生成的任何GUID
对于那些对"顺序GUID"的一般概念有疑问的人,使用"序列"的定义,即"遵循逻辑顺序",并尝试并记住Melissa病毒.这是这条线的温和文件:
出于安全原因,修改了UuidCreate,以便它不再使用计算机的MAC地址来生成UUID.引入了UuidCreateSequential以允许使用机器以太网卡的MAC地址创建UUID.
所以"序列"是基于MAC地址的GUID.
回到OP的问题,我最好猜测为什么你的GUID每次都不增加1是一个简单的事实,你可能不是唯一一个调用这个函数的人.这是一个核心Windows功能,必然会有使用它的其他组件,程序,服务等.
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |