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
- WeakEventManager.cs
- Regex.cs
- SqlMethodAttribute.cs
- ScrollBar.cs
- CqlParser.cs
- NoneExcludedImageIndexConverter.cs
- DataErrorValidationRule.cs
- TaiwanCalendar.cs
- Logging.cs
- ImageKeyConverter.cs
- BasicHttpBindingElement.cs
- _SingleItemRequestCache.cs
- Compensate.cs
- BufferedGraphicsManager.cs
- DWriteFactory.cs
- SymLanguageVendor.cs
- SessionEndingEventArgs.cs
- InvalidEnumArgumentException.cs
- _NtlmClient.cs
- StretchValidation.cs
- TableColumn.cs
- TextDocumentView.cs
- AxWrapperGen.cs
- NoneExcludedImageIndexConverter.cs
- MetabaseSettings.cs
- COM2PictureConverter.cs
- BinaryExpression.cs
- FileBasedResourceGroveler.cs
- ChannelDispatcher.cs
- EllipseGeometry.cs
- TableLayoutPanelDesigner.cs
- ObjectDataSourceDisposingEventArgs.cs
- RegisteredScript.cs
- CodeAttributeArgument.cs
- figurelength.cs
- HiddenField.cs
- ExpressionBindings.cs
- OdbcCommandBuilder.cs
- NetWebProxyFinder.cs
- XsdDuration.cs
- CustomErrorsSection.cs
- ThreadStartException.cs
- GenericTypeParameterBuilder.cs
- SqlBooleanizer.cs
- GridSplitter.cs
- DbInsertCommandTree.cs
- NullableIntMinMaxAggregationOperator.cs
- Rotation3D.cs
- TableColumn.cs
- PropertyEmitter.cs
- TypedTableBaseExtensions.cs
- BatchStream.cs
- AuthenticateEventArgs.cs
- ContentPlaceHolder.cs
- BulletedListDesigner.cs
- TraceHandlerErrorFormatter.cs
- RecordConverter.cs
- TranslateTransform3D.cs
- XmlFormatExtensionPointAttribute.cs
- MultiDataTrigger.cs
- Freezable.cs
- WebBrowserHelper.cs
- MenuItem.cs
- StorageEntitySetMapping.cs
- BindingParameterCollection.cs
- ProjectionCamera.cs
- EntityContainerEmitter.cs
- OdbcPermission.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- RegexParser.cs
- SqlCacheDependencyDatabase.cs
- SemanticValue.cs
- ListViewPagedDataSource.cs
- ClientRuntimeConfig.cs
- TimeZone.cs
- TableLayoutPanel.cs
- CellTreeSimplifier.cs
- AnimationTimeline.cs
- WorkflowQueueInfo.cs
- TransformPattern.cs
- BatchWriter.cs
- SystemIcmpV6Statistics.cs
- ExtensionQuery.cs
- SqlHelper.cs
- ResourceKey.cs
- AmbiguousMatchException.cs
- LocalClientSecuritySettingsElement.cs
- ApplicationInfo.cs
- EmbeddedMailObject.cs
- RSAOAEPKeyExchangeDeformatter.cs
- InternalControlCollection.cs
- ToolStripItem.cs
- COM2PropertyDescriptor.cs
- HtmlControl.cs
- DetailsViewRow.cs
- PathParser.cs
- SymmetricAlgorithm.cs
- InvalidCastException.cs
- Memoizer.cs
- WinEventHandler.cs