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); } }
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); } }
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); } }