是否有管理型系统级序号生成器? 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/

10-11 05:18