Skip to content

17933

  • 17933
  • 153d0b7
  • Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
  • Choose a tag to compare

  • 17933
  • 153d0b7
  • Choose a tag to compare

  • Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
@jhonabreul jhonabreul tagged this 21 Jul 21:24
* Memoize order and order ticket enumerables in SecurityTransactionManager

Wrap the enumerables returned by GetOrders, GetOrderTickets and
GetOpenOrderTickets in MemoizingEnumerable so they expose a Count
property, which also enables len() on them in Python algorithms.

* Memoize lazy enumerables in other user-facing APIs

Wrap SubscriptionManager.Subscriptions, SecurityCache.GetAll,
Cash.SecuritySymbols and ICurrencyConversion.ConversionRateSecurities
in MemoizingEnumerable so they expose a Count property, which also
enables len() on them in Python algorithms.

* Add Count property to IObjectStore

Exposes the count of stored objects without loading their content,
which also enables len() on the object store in Python algorithms.

* Revert "Add Count property to IObjectStore"

This reverts commit 84c0a08c7c30f14a6986a7e11dc89ea426606d1e.

* Avoid memoization overhead on engine hot paths

- Revert SecurityCache.GetAll memoization: fill models enumerate it once
  per open order on every fill scan, so memoizing only adds allocations
  and per-item locking on a hot path.
- SecurityTransactionManager.GetOpenOrdersRemainingQuantity and
  CancelOpenOrders go directly to the order processor since they
  enumerate a single time, keeping memoization only for the enumerables
  returned to the user.

* Centralize order ticket memoization decision in private helpers

Replace direct _orderProcessor calls with private GetOrderTickets/
GetOpenOrderTickets overloads taking a required memoize flag, so every
internal call site states whether the enumerable is single-pass (engine
paths) or user-facing (memoized). Also drop the redundant x => true
fallback: IOrderProvider documents null as match-all and every
implementation handles it.

* Coalesce null order ticket filters before reaching the order processor

Preserves the previous behavior where IOrderProcessor implementations
never received a null filter from the transaction manager.
Assets 2
Loading