Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / QueryOperators / Inlined / LongCountAggregationOperator.cs / 1305376 / LongCountAggregationOperator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // CountAggregationOperator.cs // //[....] // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Threading; namespace System.Linq.Parallel { ////// An inlined count aggregation and its enumerator. /// ///internal sealed class LongCountAggregationOperator : InlinedAggregationOperator { //---------------------------------------------------------------------------------------- // Constructs a new instance of the operator. // internal LongCountAggregationOperator(IEnumerable child) : base(child) { } //--------------------------------------------------------------------------------------- // Executes the entire query tree, and aggregates the intermediate results into the // final result based on the binary operators and final reduction. // // Return Value: // The single result of aggregation. // protected override long InternalAggregate(ref Exception singularExceptionToThrow) { // Because the final reduction is typically much cheaper than the intermediate // reductions over the individual partitions, and because each parallel partition // will do a lot of work to produce a single output element, we prefer to turn off // pipelining, and process the final reductions serially. using (IEnumerator enumerator = GetEnumerator(ParallelMergeOptions.FullyBuffered, true)) { // We just reduce the elements in each output partition. long count = 0; while (enumerator.MoveNext()) { checked { count += enumerator.Current; } } return count; } } //--------------------------------------------------------------------------------------- // Creates an enumerator that is used internally for the final aggregation step. // protected override QueryOperatorEnumerator CreateEnumerator ( int index, int count, QueryOperatorEnumerator source, object sharedData, CancellationToken cancellationToken) { return new LongCountAggregationOperatorEnumerator (source, index, cancellationToken); } //--------------------------------------------------------------------------------------- // This enumerator type encapsulates the intermediary aggregation over the underlying // (possibly partitioned) data source. // private class LongCountAggregationOperatorEnumerator : InlinedAggregationOperatorEnumerator { private readonly QueryOperatorEnumerator m_source; // The source data. //---------------------------------------------------------------------------------------- // Instantiates a new aggregation operator. // internal LongCountAggregationOperatorEnumerator(QueryOperatorEnumerator source, int partitionIndex, CancellationToken cancellationToken) : base(partitionIndex, cancellationToken) { Contract.Assert(source != null); m_source = source; } //--------------------------------------------------------------------------------------- // Counts the elements in the underlying data source, walking the entire thing the first // time MoveNext is called on this object. // protected override bool MoveNextCore(ref long currentElement) { TSource elementUnused = default(TSource); TKey keyUnused = default(TKey); QueryOperatorEnumerator source = m_source; if (source.MoveNext(ref elementUnused, ref keyUnused)) { // We just scroll through the enumerator and keep a running count. long count = 0; int i = 0; do { if ((i++ & CancellationState.POLL_INTERVAL) == 0) CancellationState.ThrowIfCanceled(m_cancellationToken); checked { count++; } } while (source.MoveNext(ref elementUnused, ref keyUnused)); currentElement = count; return true; } return false; } //---------------------------------------------------------------------------------------- // Dispose of resources associated with the underlying enumerator. // protected override void Dispose(bool disposing) { Contract.Assert(m_source != null); m_source.Dispose(); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XPathConvert.cs
- XmlTypeAttribute.cs
- ParagraphResult.cs
- DesignerView.Commands.cs
- EncryptedReference.cs
- MSG.cs
- TableLayoutPanel.cs
- WebBrowser.cs
- TextDecorationCollectionConverter.cs
- DocumentPage.cs
- RubberbandSelector.cs
- HybridDictionary.cs
- Floater.cs
- DataGridItemEventArgs.cs
- IssuedTokenClientBehaviorsElementCollection.cs
- WorkflowServiceBehavior.cs
- SafeArchiveContext.cs
- ToolStripDropTargetManager.cs
- Bezier.cs
- AsyncOperation.cs
- Crypto.cs
- EditingScope.cs
- RequestCacheValidator.cs
- FixedTextPointer.cs
- InternalConfigSettingsFactory.cs
- RegexMatchCollection.cs
- NavigationWindowAutomationPeer.cs
- ListBoxAutomationPeer.cs
- Events.cs
- DataMemberAttribute.cs
- FigureHelper.cs
- Latin1Encoding.cs
- CompositionAdorner.cs
- TypedTableBase.cs
- __ComObject.cs
- ToolBarButtonDesigner.cs
- ResourceReader.cs
- LogicalExpr.cs
- XmlParserContext.cs
- BrushValueSerializer.cs
- ResourceProviderFactory.cs
- CryptoApi.cs
- FixedTextView.cs
- Repeater.cs
- DecimalStorage.cs
- DataBinding.cs
- ContainerFilterService.cs
- MediaScriptCommandRoutedEventArgs.cs
- XamlGridLengthSerializer.cs
- RegexBoyerMoore.cs
- DataColumnPropertyDescriptor.cs
- BuildManager.cs
- ParseElement.cs
- PackWebResponse.cs
- SemaphoreFullException.cs
- ClientUrlResolverWrapper.cs
- TimeManager.cs
- PageTheme.cs
- ProcessModelInfo.cs
- PolygonHotSpot.cs
- SystemUnicastIPAddressInformation.cs
- UnsafeNativeMethods.cs
- ConnectionManagementSection.cs
- NumberAction.cs
- GridLengthConverter.cs
- BaseProcessor.cs
- AcceleratedTokenProvider.cs
- UInt64.cs
- ZipIOExtraField.cs
- FormClosedEvent.cs
- BuildProviderCollection.cs
- ControlHelper.cs
- HTMLTagNameToTypeMapper.cs
- StringPropertyBuilder.cs
- UdpTransportBindingElement.cs
- TreeViewCancelEvent.cs
- IndexedEnumerable.cs
- DataBoundControlParameterTarget.cs
- AspCompat.cs
- WebPartConnectVerb.cs
- AssemblyNameProxy.cs
- InnerItemCollectionView.cs
- DynamicDiscoveryDocument.cs
- ProfileService.cs
- ExpressionBinding.cs
- DashStyle.cs
- WebServiceMethodData.cs
- CompilerLocalReference.cs
- XmlStreamStore.cs
- CalendarDay.cs
- PipeStream.cs
- IpcChannelHelper.cs
- DNS.cs
- Int32RectConverter.cs
- SystemWebSectionGroup.cs
- DesignerVerbCollection.cs
- SafeNativeMethods.cs
- CodeMethodMap.cs
- DbModificationClause.cs
- XmlSchemaException.cs