示例#1
0
        public static int Main(string[] args)
        {
            GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency;

            try
            {
                IWebHost host = InitializationWorker.Run(args.Length == 0 ? null :  args[0]).Result;
                Console.WriteLine("Initialization Finished");
                Collect(true);

                WarmUpWorker.Run();

                Collect(true);
                Collect(true);
                Collect(true);

                //Stats.Print();
                UnsafeStringContainer.PrintUsage();
                host.WaitForShutdown();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(-1);
            }

            Console.WriteLine("Application exited");
            return(0);
        }
示例#2
0
        public ushort GetOrAdd(string value)
        {
            if (value == null)
            {
                return(0);
            }

            if (_string2Index.TryGetValue(value, out ushort result))
            {
                return(result);
            }


            result = ++_currentIndex;
            _index2String[result] = value;
            Utf8String utf8String = UnsafeStringContainer.GetString(value, _quote);

            _index2Bytes[result] = utf8String;
            _utf82index.Add(utf8String, result);

            _string2Index.Add(value, result);
            _index2Accounts[result] = new HList <uint>();

            return(result);
        }
示例#3
0
        private static unsafe bool ParseEmailValue(ref ParseContext pctx, AccountStub stub)
        {
            stub.Fields |= UpdatedFields.Email;
            pctx.Move(1); // skip quote

            var separatorIndex = pctx.IndexOfAny((byte)'"', (byte)'@');

            if (pctx[separatorIndex] == '"')
            {
                return(false);
            }

            var p = pctx.CurrentPointer;

            pctx.Move(separatorIndex + 1);

            var quoteIndex = pctx.IndexOf((byte)'"');

            var domainString = new Utf8String(pctx.CurrentPointer, quoteIndex);

            ushort domainIndex = StringIndexer.Domains.Find(domainString);

            var spanEmail = new SpanEmail(p, (byte)separatorIndex, domainIndex);

            if (!Database.IsUniqueEmail(spanEmail))
            {
                return(false);
            }

            stub.email = new Email(UnsafeStringContainer.Clone(new ReadOnlySpan <byte>(p, separatorIndex)), domainIndex);

            pctx.Move(quoteIndex + 2);

            return(true);
        }
示例#4
0
        public override Email ReadJson(JsonReader reader, Type objectType, Email existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            var    value  = (string)reader.Value;
            var    tokens = value.Split('@');
            ushort domainIndex;

            lock (_latch)
            {
                domainIndex = StringIndexer.Domains.GetOrAdd(tokens[1]);
            }
            Utf8String email = UnsafeStringContainer.GetString(tokens[0], false);

            return(new Email(email, domainIndex));
        }
示例#5
0
        public void FillAccount(Account account)
        {
            account.id    = id;
            account.Email = email;

            account.fname = fname;
            account.sname = sname;

            account.phone = UnsafeStringContainer.GetString(phone, true);

            account.country   = country;
            account.premium   = premium;
            account.interests = interests;
            account.SexStatus = sexStatus == SexStatus.None ? GetSexStatus() : sexStatus;


            account.birth = birth;
            account.city  = city;
            account.likes?.Clear();
            account.ReplaceLikes(likes, false);
            account.joined = joined;
        }