MsmqInputMessagePool.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.ServiceModel.Channels
  5. {
  6. interface IMsmqMessagePool : IDisposable
  7. {
  8. MsmqInputMessage TakeMessage();
  9. void ReturnMessage(MsmqInputMessage message);
  10. }
  11. sealed class MsmqInputMessagePool
  12. : SynchronizedDisposablePool<MsmqInputMessage>, IMsmqMessagePool
  13. {
  14. int maxPoolSize;
  15. internal MsmqInputMessagePool(int maxPoolSize)
  16. : base(maxPoolSize)
  17. {
  18. this.maxPoolSize = maxPoolSize;
  19. }
  20. MsmqInputMessage IMsmqMessagePool.TakeMessage()
  21. {
  22. MsmqInputMessage message = this.Take();
  23. if (null == message)
  24. message = new MsmqInputMessage();
  25. return message;
  26. }
  27. void IMsmqMessagePool.ReturnMessage(MsmqInputMessage message)
  28. {
  29. if (!this.Return(message))
  30. {
  31. MsmqDiagnostics.PoolFull(this.maxPoolSize);
  32. message.Dispose();
  33. }
  34. }
  35. }
  36. }