//---------------------------------------------------------------------
        // Count Cache
        async Task <int> IGrainDCacheMapCounter.countMap()
        {
            ListCountTask.Clear();

            for (int i = 1; i <= MapCount; i++)
            {
                SB.Clear();
                SB.Append(KeyTitle);
                SB.Append("_");
                SB.Append(i);
                var grain_map = this.GrainFactory.GetGrain <IGrainDCacheMap>(SB.ToString());
                ListCountTask.Add(grain_map.getMapCount());
            }

            await Task.WhenAll(ListCountTask);

            MapCacheDataCount = 0;
            foreach (var i in ListCountTask)
            {
                if (i.IsCompleted)
                {
                    MapCacheDataCount += ((Task <int>)i).Result;
                }
            }

            ListCountTask.Clear();

            return(MapCacheDataCount);
        }
        //---------------------------------------------------------------------
        // 初始化MasteSlave
        async Task IGrainDCache.initMasteSlave(string maste_name)
        {
            var  grain_master = this.GrainFactory.GetGrain <IGrainDCacheMaster>(maste_name);
            bool is_inited    = await grain_master.GetIfInit();

            if (is_inited)
            {
                return;
            }

            grain_master.Init();
            grain_master.setup(maste_name, DCacheMasterSlaveMaxDeep, DCacheMasterSlaveCount);

            for (int i = 1; i <= DCacheMasterSlaveCount; i++)
            {
                SB.Clear();
                SB.Append(maste_name);
                SB.Append("_");
                SB.Append(SLAVE_MAP_NAME);
                SB.Append("_");
                SB.Append(SLAVE_ROOT_DEEP);
                SB.Append("_");
                SB.Append(i);
                var grain_slave = this.GrainFactory.GetGrain <IGrainDCacheSlave>(SB.ToString());
                grain_slave.setup(maste_name, SLAVE_ROOT_DEEP, DCacheMasterSlaveMaxDeep, DCacheMasterSlaveCount);
            }
        }
        //---------------------------------------------------------------------
        // Count 所有MapCache
        async Task <int> IGrainDCache.countMap(string map_name)
        {
            SB.Clear();
            SB.Append(map_name);
            SB.Append("_");
            SB.Append(DCACHEMAP_COUNTER_TITLE);
            var grain_mapcounter = this.GrainFactory.GetGrain <IGrainDCacheMapCounter>(SB.ToString());
            int count            = await grain_mapcounter.countMap();

            return(count);
        }
        //---------------------------------------------------------------------
        // 从Map中随机获取数据
        async Task <List <byte[]> > IGrainDCache.getFromMapRandom(string map_name, int count)
        {
            int map_index = Random.Next(1, DCacheMapCount + 1);

            SB.Clear();
            SB.Append(map_name);
            SB.Append("_");
            SB.Append(map_index);

            var grain_map  = this.GrainFactory.GetGrain <IGrainDCacheMap>(SB.ToString());
            var list_value = await grain_map.getFromMapRandom(count);

            return(list_value);
        }
        //---------------------------------------------------------------------
        public override Task OnDeactivateAsync()
        {
            if (Random != null)
            {
                Random = null;
            }

            if (SB != null)
            {
                SB.Clear();
                SB = null;
            }

            return(base.OnDeactivateAsync());
        }
        //---------------------------------------------------------------------
        public override Task OnDeactivateAsync()
        {
            if (SB != null)
            {
                SB.Clear();
                SB = null;
            }

            if (ListCountTask != null)
            {
                ListCountTask.Clear();
                ListCountTask = null;
            }

            return(base.OnDeactivateAsync());
        }
Exemple #7
0
        //---------------------------------------------------------------------
        public override Task OnDeactivateAsync()
        {
            if (MapCache != null)
            {
                MapCache.Clear();
                MapCache = null;
            }

            if (SB != null)
            {
                SB.Clear();
                SB = null;
            }

            return(base.OnDeactivateAsync());
        }
        //---------------------------------------------------------------------
        // add数据到Map中
        async Task <string> IGrainDCache.addToMap(string map_name, string ticket, string key, byte[] value)
        {
            if (string.IsNullOrEmpty(ticket))
            {
                int map_index = Random.Next(1, DCacheMapCount + 1);
                SB.Clear();
                SB.Append(map_name);
                SB.Append("_");
                SB.Append(map_index);
                ticket = SB.ToString();
            }

            var grain_map = this.GrainFactory.GetGrain <IGrainDCacheMap>(ticket);
            var tick      = await grain_map.addToMap(key, value);

            return(tick);
        }
        //---------------------------------------------------------------------
        // 从MasteSlave中获取数据
        async Task <byte[]> IGrainDCache.getFromMasteSlave(string maste_name, string key)
        {
            int slave_count = (int)Math.Pow(DCacheMasterSlaveCount, DCacheMasterSlaveMaxDeep - 1);
            int slave_index = Random.Next(1, slave_count + 1);

            SB.Clear();
            SB.Append(maste_name);
            SB.Append("_");
            SB.Append(SLAVE_MAP_NAME);
            SB.Append("_");
            SB.Append(DCacheMasterSlaveMaxDeep);
            SB.Append("_");
            SB.Append(slave_index);
            var grain_slave = this.GrainFactory.GetGrain <IGrainDCacheSlave>(SB.ToString());
            var result      = await grain_slave.getFromSlave(key);

            return(result);
        }
Exemple #10
0
        //---------------------------------------------------------------------
        // add数据到MasteSlave中
        Task IGrainDCacheMaster.addToMasteSlave(string key, byte[] value)
        {
            MapCache[key] = value;

            for (int i = 1; i <= SlaveCount; i++)
            {
                SB.Clear();
                SB.Append(MasterName);
                SB.Append("_");
                SB.Append(GrainDCache.SLAVE_MAP_NAME);
                SB.Append("_");
                SB.Append(GrainDCache.SLAVE_ROOT_DEEP);
                SB.Append("_");
                SB.Append(i);
                var grain_slave = this.GrainFactory.GetGrain <IGrainDCacheSlave>(SB.ToString());
                grain_slave.addToSlave(key, value);
            }

            return(TaskDone.Done);
        }
Exemple #11
0
        //---------------------------------------------------------------------
        // remove数据
        Task IGrainDCacheMaster.removeFromMasteSlave(string key)
        {
            if (MapCache.ContainsKey(key))
            {
                MapCache.Remove(key);
            }

            for (int i = 1; i <= SlaveCount; i++)
            {
                SB.Clear();
                SB.Append(MasterName);
                SB.Append("_");
                SB.Append(GrainDCache.SLAVE_MAP_NAME);
                SB.Append("_");
                SB.Append(GrainDCache.SLAVE_ROOT_DEEP);
                SB.Append("_");
                SB.Append(i);
                var grain_slave = this.GrainFactory.GetGrain <IGrainDCacheSlave>(SB.ToString());
                grain_slave.removeFromSlave(key);
            }

            return(TaskDone.Done);
        }
        //---------------------------------------------------------------------
        // 初始化Map
        async Task IGrainDCache.initMap(string map_name)
        {
            int count = DCacheMapCount;

            int map_index = Random.Next(1, count + 1);

            SB.Clear();
            SB.Append(map_name);
            SB.Append("_");
            SB.Append(map_index);

            var grain_maprandom = this.GrainFactory.GetGrain <IGrainDCacheMap>(SB.ToString());
            var is_inited       = await grain_maprandom.GetIfInit();

            if (is_inited)
            {
                return;
            }

            SB.Clear();
            SB.Append(map_name);
            SB.Append("_");
            SB.Append(DCACHEMAP_COUNTER_TITLE);
            var grain_mapcounter = this.GrainFactory.GetGrain <IGrainDCacheMapCounter>(SB.ToString());

            grain_mapcounter.setup(map_name, count);

            for (int i = 1; i <= count; i++)
            {
                SB.Clear();
                SB.Append(map_name);
                SB.Append("_");
                SB.Append(i);
                var grain_map = this.GrainFactory.GetGrain <IGrainDCacheMap>(SB.ToString());
                grain_map.setup();
            }
        }
Exemple #13
0
        private int method5(List <double[][]>[] rgbList, int chr)
        {
            List <double> subDiff = new List <double>();

            List <double[][]> MR, MG, MB;
            List <double[][]> SR, SG, SB;

            int listSize   = rgbList[0].Count;
            int windowSize = Math.Min(Global.maxWidth, listSize);
            int result     = 0;
            int minWidth   = 40;

            switch (chr)
            {
            case 0:
                // 4:4:4
                for (int i = minWidth; i < windowSize; i++)
                {
                    MR = rgbList[0].Take(listSize - i).ToList();
                    MG = rgbList[1].Take(listSize - i).ToList();
                    MB = rgbList[2].Take(listSize - i).ToList();

                    SR = rgbList[0].Skip(i).ToList();
                    SG = rgbList[1].Skip(i).ToList();
                    SB = rgbList[2].Skip(i).ToList();

                    subDiff.Add(UBDiffSum(MR, MG, MB, SR, SG, SB));

                    MR.Clear();
                    MG.Clear();
                    MB.Clear();
                    SR.Clear();
                    SG.Clear();
                    SB.Clear();
                }
                result = subDiff.IndexOf(subDiff.Min()) + minWidth;
                break;

            case 1:
                // 4:4:0
                for (int i = minWidth; i < windowSize; i++)
                {
                    MR = rgbList[0].Where((item, index) => index % 2 != 0).Take(listSize / 2 - i).ToList();
                    MG = rgbList[1].Where((item, index) => index % 2 != 0).Take(listSize / 2 - i).ToList();
                    MB = rgbList[2].Where((item, index) => index % 2 != 0).Take(listSize / 2 - i).ToList();

                    SR = rgbList[0].Skip(2 * i).Where((item, index) => index % 2 == 0).ToList();
                    SG = rgbList[1].Skip(2 * i).Where((item, index) => index % 2 == 0).ToList();
                    SB = rgbList[2].Skip(2 * i).Where((item, index) => index % 2 == 0).ToList();

                    subDiff.Add(UBDiffSum(MR, MG, MB, SR, SG, SB));

                    MR.Clear();
                    MG.Clear();
                    MB.Clear();
                    SR.Clear();
                    SG.Clear();
                    SB.Clear();
                }
                result = subDiff.IndexOf(subDiff.Min()) + minWidth;
                break;

            case 2:
                // 4:2:2
                for (int i = minWidth; i < windowSize; i += 2)
                {
                    MR = rgbList[0].Take(listSize - i).ToList();
                    MG = rgbList[1].Take(listSize - i).ToList();
                    MB = rgbList[2].Take(listSize - i).ToList();

                    SR = rgbList[0].Skip(i).ToList();
                    SG = rgbList[1].Skip(i).ToList();
                    SB = rgbList[2].Skip(i).ToList();

                    subDiff.Add(UBDiffSum(MR, MG, MB, SR, SG, SB));

                    MR.Clear();
                    MG.Clear();
                    MB.Clear();
                    SR.Clear();
                    SG.Clear();
                    SB.Clear();
                }
                result = subDiff.IndexOf(subDiff.Min()) + minWidth / 2;
                break;

            case 3:
                //4:2:0
                for (int i = minWidth; i < windowSize; i += 2)
                {
                    MR = rgbList[0].Where((item, index) => index % 4 == 2 || index % 4 == 3).Take(listSize / 2 - i).ToList();
                    MG = rgbList[1].Where((item, index) => index % 4 == 2 || index % 4 == 3).Take(listSize / 2 - i).ToList();
                    MB = rgbList[2].Where((item, index) => index % 4 == 2 || index % 4 == 3).Take(listSize / 2 - i).ToList();

                    SR = rgbList[0].Skip(2 * i).Where((item, index) => index % 4 == 0 || index % 4 == 1).ToList();
                    SG = rgbList[1].Skip(2 * i).Where((item, index) => index % 4 == 0 || index % 4 == 1).ToList();
                    SB = rgbList[2].Skip(2 * i).Where((item, index) => index % 4 == 0 || index % 4 == 1).ToList();

                    subDiff.Add(UBDiffSum(MR, MG, MB, SR, SG, SB));

                    MR.Clear();
                    MG.Clear();
                    MB.Clear();
                    SR.Clear();
                    SG.Clear();
                    SB.Clear();
                }
                result = subDiff.IndexOf(subDiff.Min()) + minWidth / 2;
                break;
            }

            return(result);
        }
Exemple #14
0
 private void MenuClear_Click(object sender, RoutedEventArgs e)
 {
     SB.Clear();
 }
Exemple #15
0
 //---------------------------------------------------------------------
 public void ClearSB()
 {
     SB.Clear();
 }