• 根据SQL Server排序规则创建顺序GUID


     public static class GuidUtil
        {
            private static readonly long EpochMilliseconds = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks / 10000L;
    
            /// <summary>
            /// Creates a sequential GUID according to SQL Server's ordering rules.
            /// </summary>
            public static Guid NewSequentialId()
            {
                // This code was not reviewed to guarantee uniqueness under most conditions, nor completely optimize for avoiding
                // page splits in SQL Server when doing inserts from multiple hosts, so do not re-use in production systems.
                var guidBytes = Guid.NewGuid().ToByteArray();
    
                // get the milliseconds since Jan 1 1970
                byte[] sequential = BitConverter.GetBytes((DateTime.Now.Ticks / 10000L) - EpochMilliseconds);
    
                // discard the 2 most significant bytes, as we only care about the milliseconds increasing, but the highest ones 
                // should be 0 for several thousand years to come (non-issue).
                if (BitConverter.IsLittleEndian)
                {
                    guidBytes[10] = sequential[5];
                    guidBytes[11] = sequential[4];
                    guidBytes[12] = sequential[3];
                    guidBytes[13] = sequential[2];
                    guidBytes[14] = sequential[1];
                    guidBytes[15] = sequential[0];
                }
                else
                {
                    Buffer.BlockCopy(sequential, 2, guidBytes, 10, 6);
                }
    
                return new Guid(guidBytes);
            }
        }
  • 相关阅读:
    C#’s ~ vs Java’s finalize
    做Java开发这一年
    assertThat, assertEquals, assertTrue
    给Cuke4Duke添加一个AfterAll标签(一):使用Cuke4Duke
    心理问题的根源
    何谓数学
    人生谁看透
    人本主义与自由意志
    哲学的基本问题
    贫穷与教育
  • 原文地址:https://www.cnblogs.com/mycing/p/6063775.html
Copyright © 2020-2023  润新知