是否有管理型系统级序号生成器? DateTime.Now.Ticks不会执行,因为我正在执行的操作有时每个刻度会发生一次以上。
要求说明:
不可知的过程-实际上只有一个过程可以访问此过程。
性能至关重要!这用于记录广告服务器上的展示次数,最高可以达到1k /秒
它必须是以下之一:
一个4字节序号,可重置每个刻度
一个12字节的序号-实际上将4字节的粒度添加到DateTime
最佳答案
没有一个用于此目的的,但是您可以使用System.Diagnostics.PerformanceCounter。您也可以使用注册表,但是需要在整个过程中序列化读/写访问权限。
System.Diagnostics.PerformanceCounter pc
= new System.Diagnostics.PerformanceCounter("SeqCounter", "SeqInstance");
long myVal=pc.Increment();
编辑
我考虑的越多,我认为这可能是一个不错的解决方案。递增将通过原子操作将计数器增加1,该操作应在系统上的所有进程中起作用。
编辑
根据您的修改,我不建议您使用效果计数器。性能计数器是协调多个流程的一种方式。我不确定内部实现如何编码。
为什么不能只使用静态变量并对其进行递增?如果您希望某些东西是线程安全的,则必须锁定。
System.Threading.Interlocked.Increment
仅供参考:如果您在32位系统上使用长版,则不会确保线程安全。
编辑以显示我使用的实现(DS):
public static class Int32Sequencer
{
private static Int32 lastSequence = Int32.MinValue;
private static Object lockObject = new Object();
public static Int32 GetNextSequence()
{
lock (lockObject)
{
unchecked { lastSequence++; }
return lastSequence;
}
}
}
关于c# - Windows/C#系统级序号生成器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/747742/