示例#1
0
 protected override void GetAllInternal(ArrayList partitionToKeyData, ConcurrentQueue <KeyValuePair <IData, object> > resultingKeyValuePairs)
 {
     Parallel.For(0, partitionToKeyData.Count, partitionId =>
     {
         var keyList = (ArrayList)partitionToKeyData[partitionId];
         for (int i = keyList.Count - 1; i > -1; i--)
         {
             var keyData = (IData)keyList[i];
             object value;
             if (_nearCache.TryGetValue(keyData, out value))
             {
                 keyList.RemoveAt(i);
                 resultingKeyValuePairs.Enqueue(new KeyValuePair <IData, object>(keyData, value));
             }
         }
     });
     base.GetAllInternal(partitionToKeyData, resultingKeyValuePairs);
     foreach (var kvp in resultingKeyValuePairs)
     {
         _nearCache.TryAdd(kvp.Key, kvp.Value);
     }
 }
示例#2
0
 protected override void GetAllInternal(List <List <IData> > partitionToKeyData,
                                        List <KeyValuePair <IData, object> > resultingKeyValuePairs)
 {
     for (var partitionId = 0; partitionId < partitionToKeyData.Count; partitionId++)
     {
         var keyList = partitionToKeyData[partitionId];
         for (var i = keyList.Count - 1; i > -1; i--)
         {
             var keyData = keyList[i];
             if (_nearCache.TryGetValue(keyData, out var value))
             {
                 keyList.RemoveAt(i);
                 resultingKeyValuePairs.Add(new KeyValuePair <IData, object>(keyData, value));
             }
         }
     }
     base.GetAllInternal(partitionToKeyData, resultingKeyValuePairs);
     foreach (var kvp in resultingKeyValuePairs)
     {
         _nearCache.TryAdd(kvp.Key, kvp.Value);
     }
 }
示例#3
0
        protected override void GetAllInternal(ICollection <IData> keyDatas, List <object> resultingKeyValuePairs)
        {
            var list = new List <IData>(keyDatas);

            foreach (var keyData in keyDatas)
            {
                object value;
                if (_nearCache.TryGetValue(keyData, out value))
                {
                    list.Remove(keyData);
                    resultingKeyValuePairs.Add(keyData);
                    resultingKeyValuePairs.Add(value);
                }
            }
            base.GetAllInternal(list, resultingKeyValuePairs);

            for (var i = 0; i < resultingKeyValuePairs.Count;)
            {
                var keyData = (IData)resultingKeyValuePairs[i++];
                var value   = resultingKeyValuePairs[i++];
                _nearCache.TryAdd(keyData, value);
            }
        }