Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- DateTimeOffset.cs
- PieceDirectory.cs
- TypefaceCollection.cs
- SimpleMailWebEventProvider.cs
- DataSourceProvider.cs
- PtsPage.cs
- WebEncodingValidatorAttribute.cs
- PerspectiveCamera.cs
- CustomAttributeSerializer.cs
- SafeArrayTypeMismatchException.cs
- ReferenceEqualityComparer.cs
- RoutedUICommand.cs
- ContainerVisual.cs
- XPathNodeHelper.cs
- Queue.cs
- WindowsScrollBarBits.cs
- PreservationFileWriter.cs
- TextBoxDesigner.cs
- CorrelationService.cs
- DataGridParentRows.cs
- CompleteWizardStep.cs
- ToolStripGrip.cs
- ColumnWidthChangingEvent.cs
- BodyGlyph.cs
- PrimitiveXmlSerializers.cs
- DoubleLinkListEnumerator.cs
- ParseHttpDate.cs
- ConsumerConnectionPoint.cs
- SqlProcedureAttribute.cs
- HyperLinkField.cs
- CapacityStreamGeometryContext.cs
- NameNode.cs
- HttpRuntimeSection.cs
- EntityCommand.cs
- ResXBuildProvider.cs
- RegistryPermission.cs
- RIPEMD160.cs
- altserialization.cs
- TablePattern.cs
- ValidatorUtils.cs
- Calendar.cs
- RenderDataDrawingContext.cs
- MLangCodePageEncoding.cs
- _ContextAwareResult.cs
- ProcessHost.cs
- TryCatchDesigner.xaml.cs
- PropertyChangeTracker.cs
- FormViewRow.cs
- DataGridViewCheckBoxColumn.cs
- EntityDataSourceWrapper.cs
- HtmlInputSubmit.cs
- InternalTypeHelper.cs
- InvokeWebServiceDesigner.cs
- EventArgs.cs
- LayoutTable.cs
- ConnectionStringSettingsCollection.cs
- EntityContainerEntitySetDefiningQuery.cs
- SafeSecurityHelper.cs
- InstanceLockTracking.cs
- ReadOnlyHierarchicalDataSource.cs
- RegexNode.cs
- TiffBitmapDecoder.cs
- XmlUtil.cs
- DateTimeHelper.cs
- QuadraticBezierSegment.cs
- IImplicitResourceProvider.cs
- UntrustedRecipientException.cs
- CmsInterop.cs
- DetailsViewRowCollection.cs
- CommandID.cs
- BufferAllocator.cs
- FontUnit.cs
- FixedSOMTableRow.cs
- MemberPath.cs
- XPathDocumentBuilder.cs
- ActivityScheduledRecord.cs
- EventEntry.cs
- EventPropertyMap.cs
- UIElementPropertyUndoUnit.cs
- IsolatedStorage.cs
- SystemFonts.cs
- OdbcConnectionOpen.cs
- __TransparentProxy.cs
- CompilerResults.cs
- EventLogPermissionAttribute.cs
- HttpContext.cs
- TextEndOfLine.cs
- GridLengthConverter.cs
- DoubleCollectionConverter.cs
- Inline.cs
- ObfuscationAttribute.cs
- CollectionView.cs
- TextSpan.cs
- MergePropertyDescriptor.cs
- ListDictionaryInternal.cs
- NetCodeGroup.cs
- ExpressionParser.cs
- AutomationPropertyInfo.cs
- CreateParams.cs
- NumberEdit.cs