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
- AliasGenerator.cs
- RolePrincipal.cs
- DefaultBinder.cs
- DateTimeStorage.cs
- CodeArrayCreateExpression.cs
- LoginUtil.cs
- DirectoryRootQuery.cs
- PeerCollaboration.cs
- Int16Converter.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- DeferrableContentConverter.cs
- TriggerCollection.cs
- DispatcherEventArgs.cs
- XmlCharacterData.cs
- SafeNativeMethodsOther.cs
- JsonStringDataContract.cs
- ReadOnlyObservableCollection.cs
- AxDesigner.cs
- RenderContext.cs
- CodeGenHelper.cs
- DebuggerAttributes.cs
- NavigatorInput.cs
- Trace.cs
- SelectedCellsCollection.cs
- RegexCompilationInfo.cs
- CuspData.cs
- IImplicitResourceProvider.cs
- SqlTriggerContext.cs
- MultiPageTextView.cs
- SafeSystemMetrics.cs
- WebPartConnectVerb.cs
- TextRunTypographyProperties.cs
- EmptyEnumerator.cs
- DirectoryInfo.cs
- InvalidOperationException.cs
- SimpleColumnProvider.cs
- FamilyTypefaceCollection.cs
- TransformerConfigurationWizardBase.cs
- ASCIIEncoding.cs
- ObjectManager.cs
- ContainerUIElement3D.cs
- GridViewRowEventArgs.cs
- BufferModeSettings.cs
- XsdDuration.cs
- GlyphManager.cs
- XmlBoundElement.cs
- SqlDataReaderSmi.cs
- ObjectItemLoadingSessionData.cs
- ContentDisposition.cs
- CounterNameConverter.cs
- NavigationWindowAutomationPeer.cs
- Attributes.cs
- LinqExpressionNormalizer.cs
- HtmlProps.cs
- RotateTransform.cs
- BmpBitmapEncoder.cs
- Context.cs
- ExpressionBindingCollection.cs
- unsafeIndexingFilterStream.cs
- DesignTimeType.cs
- HostedImpersonationContext.cs
- ErrorLog.cs
- HtmlInputSubmit.cs
- CompilerGlobalScopeAttribute.cs
- SelectionRangeConverter.cs
- odbcmetadatafactory.cs
- ValueTable.cs
- SqlFunctionAttribute.cs
- ParamArrayAttribute.cs
- MessageSmuggler.cs
- ClientOptions.cs
- RangeValueProviderWrapper.cs
- MissingMethodException.cs
- WebPartsPersonalizationAuthorization.cs
- WebBrowserNavigatingEventHandler.cs
- InputMethodStateTypeInfo.cs
- TiffBitmapEncoder.cs
- CompModSwitches.cs
- SqlStatistics.cs
- XmlImplementation.cs
- WebPartDeleteVerb.cs
- IProvider.cs
- FormatVersion.cs
- RuntimeCompatibilityAttribute.cs
- RoutedEventConverter.cs
- FormsAuthenticationEventArgs.cs
- Win32.cs
- ControlParameter.cs
- ChannelManager.cs
- SearchForVirtualItemEventArgs.cs
- EventOpcode.cs
- NativeMethods.cs
- HttpRequestWrapper.cs
- LoadedOrUnloadedOperation.cs
- SiteMapNodeItem.cs
- ParallelTimeline.cs
- FloaterParaClient.cs
- TreeNodeCollection.cs
- FontFamilyIdentifier.cs
- Package.cs