Пример #1
0
        public GroupPreprocessor(
            MainContext mainContext,
            MainStorage mainStorage,
            MainPool mainPool)
        {
            _context = mainContext;
            _storage = mainStorage;
            _pool    = mainPool;

            _worker = new SingleThreadWorker <Request>(r => {
                if (r.PostEnded)
                {
                    CompressImpl();
                    DataConfig.GroupUpdates = false;
                    return;
                }

                if (r.ImportEnded)
                {
                    LoadEndedImpl();
                    return;
                }

                if (r.IsLoad)
                {
                    AddImpl(r.Dto, true);
                    return;
                }

                DataConfig.GroupUpdates = true;

                if (r.IsAdd)
                {
                    AddImpl(r.Dto, false);
                }
                else
                {
                    UpdateImpl(r.Dto);
                }
            }, "Group thread started");

            for (int i = 1; i < 32; i++)
            {
                GroupKey keys = (GroupKey)i;

                int initialCapacity = 1;
                if (keys.HasFlag(GroupKey.Sex))
                {
                    initialCapacity *= 2;
                }

                if (keys.HasFlag(GroupKey.Status))
                {
                    initialCapacity *= 3;
                }

                if (keys.HasFlag(GroupKey.City))
                {
                    initialCapacity *= 700;
                }

                if (keys.HasFlag(GroupKey.Country))
                {
                    initialCapacity *= 100;
                }

                if (keys.HasFlag(GroupKey.Interest))
                {
                    initialCapacity *= 160;
                }

                initialCapacity = Math.Min(initialCapacity, DataConfig.MaxId);

                _data[keys] = new SortedSet <GroupBucket>(GroupBucketComparer.Default);
            }
        }