public void TestReferenceMap() { var orderList = new List <Order>(); for (var i = 0; i < 10000; i++) { orderList.Add(new Order { Id = i, Name = i.ToString() }); } var map = new ReferenceMap <Order, Bill>(); foreach (var order in orderList) { map.Add(order, new Bill { Id = order.Id, Count = order.Id }); } foreach (var order in orderList) { Assert.True(map.ContainsKey(order)); } foreach (var order in orderList) { Assert.Equal(order.Id, map[order].Id); Assert.Equal(order.Id, map[order].Count); } var newOrderList = new List <Order>(); for (var i = 0; i < 10000; i++) { orderList.Add(new Order { Id = i, Name = i.ToString() }); } foreach (var order in newOrderList) { Assert.False(map.ContainsKey(order)); } }
/// <summary> /// Returns the object to the pool. If the object is already returned to the pool, <see cref="InvalidOperationException"/> is thrown. /// </summary> /// <param name="obj">The object to return.</param> public void Return(T obj) { locker.EnterUpgradeableReadLock(); try { if (!idleObjects.ContainsKey(obj)) { throw new InvalidOperationException("The object is never created by the pool."); } if (idleObjects[obj]) { throw new InvalidOperationException("The object is already returned to the pool."); } locker.EnterWriteLock(); try { bool localValidateOnReturn = validator.ValidateOnReturn; if (localValidateOnReturn && !validator.Validate(obj)) { DoInvalidateObject(obj); } else { objQueue.Enqueue(obj); idleObjects[obj] = true; } } finally { locker.ExitWriteLock(); } } finally { locker.ExitUpgradeableReadLock(); } objectReturned.Set(); }
public DocumentData(IEnumerable <Reference> references) : this() { if (references is null) { throw new System.ArgumentNullException(nameof(references)); } foreach (var reference in references) { if (!ReferenceMap.ContainsKey(reference.Label)) { ReferenceMap.Add(reference.Label, reference); } } }