Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Linq / Parallel / Merging / ArrayMergeHelper.cs / 1305376 / ArrayMergeHelper.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // // ArrayMergeHelper.cs // //[....] // // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Parallel; using System.Diagnostics; using System.Threading.Tasks; namespace System.Linq.Parallel { ////// A special merge helper for indexible queries. Given an indexible query, we know how many elements /// we'll have in the result set, so we can allocate the array ahead of time. Then, as each result element /// is produced, we can directly insert it into the appropriate position in the output array, paying /// no extra cost for ordering. /// ///internal class ArrayMergeHelper : IMergeHelper { private QueryResults m_queryResults; // Indexible query results private TInputOutput[] m_outputArray; // The output array. private QuerySettings m_settings; // Settings for the query. /// /// Instantiates the array merge helper. /// /// The query settings /// The query results public ArrayMergeHelper(QuerySettings settings, QueryResultsqueryResults) { m_settings = settings; m_queryResults = queryResults; int count = m_queryResults.Count; m_outputArray = new TInputOutput[count]; } /// /// A method used as a delegate passed into the ForAll operator /// private void ToArrayElement(int index) { m_outputArray[index] = m_queryResults[index]; } ////// Schedules execution of the merge itself. /// public void Execute() { ParallelQueryquery = ParallelEnumerable.Range(0, m_queryResults.Count); query = new QueryExecutionOption (QueryOperator .AsQueryOperator(query), m_settings); query.ForAll(ToArrayElement); } /// /// Gets the enumerator over the results. /// /// We never expect this method to be called. ArrayMergeHelper is intended to be used when we want /// to consume the results using GetResultsAsArray(). /// public IEnumeratorGetEnumerator() { Debug.Assert(false, "ArrayMergeHelper<>.GetEnumerator() is not intended to be used. Call GetResultsAsArray() instead."); return ((IEnumerable )GetResultsAsArray()).GetEnumerator(); } /// /// Returns the merged results as an array. /// ///public TInputOutput[] GetResultsAsArray() { Debug.Assert(m_outputArray != null); return m_outputArray; } } } // 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
- DbMetaDataColumnNames.cs
- ItemsPanelTemplate.cs
- RoutedEventArgs.cs
- PublishLicense.cs
- XmlSchemaGroup.cs
- XsdDataContractExporter.cs
- GenericEnumerator.cs
- _SslState.cs
- EditorAttribute.cs
- SmiGettersStream.cs
- JoinQueryOperator.cs
- SignedXml.cs
- SignerInfo.cs
- SqlDependency.cs
- MonthChangedEventArgs.cs
- CustomBindingCollectionElement.cs
- XamlSerializer.cs
- WinEventQueueItem.cs
- FlowPosition.cs
- EDesignUtil.cs
- StylusDevice.cs
- WorkflowControlEndpoint.cs
- XmlAttributeCollection.cs
- DataSetUtil.cs
- CornerRadius.cs
- ScriptIgnoreAttribute.cs
- ExplicitDiscriminatorMap.cs
- EntityDataSourceMemberPath.cs
- parserscommon.cs
- ListSurrogate.cs
- Decorator.cs
- DefaultBinder.cs
- Container.cs
- Tablet.cs
- DrawingDrawingContext.cs
- MetadataSection.cs
- CellLabel.cs
- RangeValuePatternIdentifiers.cs
- ExecutionScope.cs
- ComPlusContractBehavior.cs
- SqlInfoMessageEvent.cs
- Configuration.cs
- KeyTimeConverter.cs
- ProcessModelInfo.cs
- GCHandleCookieTable.cs
- SystemSounds.cs
- BoundPropertyEntry.cs
- MessageLogger.cs
- TypeValidationEventArgs.cs
- ResXResourceWriter.cs
- TrustLevelCollection.cs
- OperatingSystem.cs
- ActivationArguments.cs
- ParameterToken.cs
- GPRECTF.cs
- CheckBoxList.cs
- TranslateTransform.cs
- BinaryObjectWriter.cs
- HttpModuleCollection.cs
- SqlFileStream.cs
- SendKeys.cs
- indexingfiltermarshaler.cs
- SimpleExpression.cs
- StylusPointDescription.cs
- RenderCapability.cs
- SmtpMail.cs
- ItemChangedEventArgs.cs
- DesignerTextWriter.cs
- NumberAction.cs
- HScrollProperties.cs
- ErrorFormatterPage.cs
- QueryStringParameter.cs
- Journaling.cs
- GlyphRun.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- XmlQueryRuntime.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- ParameterRefs.cs
- DbDataAdapter.cs
- InternalResources.cs
- ClassHandlersStore.cs
- ConfigurationCollectionAttribute.cs
- WorkflowRuntimeBehavior.cs
- followingsibling.cs
- TextTreeObjectNode.cs
- CodeDOMProvider.cs
- UserControlAutomationPeer.cs
- LongCountAggregationOperator.cs
- DbConnectionPoolIdentity.cs
- ToolStripPanelSelectionBehavior.cs
- BmpBitmapEncoder.cs
- SQLMoneyStorage.cs
- DescendantOverDescendantQuery.cs
- GradientStop.cs
- PeerName.cs
- JsonObjectDataContract.cs
- ScalarType.cs
- PropertiesTab.cs
- Rule.cs
- ScriptHandlerFactory.cs