Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / xsp / System / Web / Util / SystemInfo.cs / 1 / SystemInfo.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { internal static class SystemInfo { static int _trueNumberOfProcessors; static internal int GetNumProcessCPUs() { if (_trueNumberOfProcessors == 0) { UnsafeNativeMethods.SYSTEM_INFO si; UnsafeNativeMethods.GetSystemInfo(out si); if (si.dwNumberOfProcessors == 1) { _trueNumberOfProcessors = 1; } else { // KERNEL32.DLL:GetCurrentProcess() always returns -1 under NT // Note: not really a handle (no need to CloseHandle()) IntPtr processHandle = UnsafeNativeMethods.INVALID_HANDLE_VALUE; IntPtr processAffinityMask; IntPtr systemAffinityMask; int returnCode = UnsafeNativeMethods.GetProcessAffinityMask( processHandle, out processAffinityMask, out systemAffinityMask); if (returnCode == 0) { _trueNumberOfProcessors = 1; } else { // if cpu affinity is set to a single processor busy waiting is a waste of time int numProcessors = 0; if (IntPtr.Size == 4) { uint mask = (uint) processAffinityMask; for (; mask != 0; mask >>= 1) { if ((mask & 1) == 1) { ++numProcessors; } } } else { ulong mask = (ulong) processAffinityMask; for (; mask != 0; mask >>= 1) { if ((mask & 1) == 1) { ++numProcessors; } } } _trueNumberOfProcessors = numProcessors; } } } Debug.Assert(_trueNumberOfProcessors > 0); return _trueNumberOfProcessors; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { internal static class SystemInfo { static int _trueNumberOfProcessors; static internal int GetNumProcessCPUs() { if (_trueNumberOfProcessors == 0) { UnsafeNativeMethods.SYSTEM_INFO si; UnsafeNativeMethods.GetSystemInfo(out si); if (si.dwNumberOfProcessors == 1) { _trueNumberOfProcessors = 1; } else { // KERNEL32.DLL:GetCurrentProcess() always returns -1 under NT // Note: not really a handle (no need to CloseHandle()) IntPtr processHandle = UnsafeNativeMethods.INVALID_HANDLE_VALUE; IntPtr processAffinityMask; IntPtr systemAffinityMask; int returnCode = UnsafeNativeMethods.GetProcessAffinityMask( processHandle, out processAffinityMask, out systemAffinityMask); if (returnCode == 0) { _trueNumberOfProcessors = 1; } else { // if cpu affinity is set to a single processor busy waiting is a waste of time int numProcessors = 0; if (IntPtr.Size == 4) { uint mask = (uint) processAffinityMask; for (; mask != 0; mask >>= 1) { if ((mask & 1) == 1) { ++numProcessors; } } } else { ulong mask = (ulong) processAffinityMask; for (; mask != 0; mask >>= 1) { if ((mask & 1) == 1) { ++numProcessors; } } } _trueNumberOfProcessors = numProcessors; } } } Debug.Assert(_trueNumberOfProcessors > 0); return _trueNumberOfProcessors; } } } // 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
- VisualBasicHelper.cs
- PageVisual.cs
- WindowsListViewSubItem.cs
- TextAdaptor.cs
- RemotingServices.cs
- DynamicQueryableWrapper.cs
- XmlAnyAttributeAttribute.cs
- AppearanceEditorPart.cs
- IImplicitResourceProvider.cs
- EditorZoneBase.cs
- TransactionFlowBindingElementImporter.cs
- ApplicationId.cs
- TextDpi.cs
- _TransmitFileOverlappedAsyncResult.cs
- DigitShape.cs
- WindowsButton.cs
- ArgIterator.cs
- util.cs
- HorizontalAlignConverter.cs
- GeometryConverter.cs
- SmiEventSink.cs
- QueryInterceptorAttribute.cs
- XmlAnyElementAttributes.cs
- DbSetClause.cs
- XPathEmptyIterator.cs
- WebPartsPersonalization.cs
- FramingEncoders.cs
- SQLDoubleStorage.cs
- ObjectQuery_EntitySqlExtensions.cs
- ComplexType.cs
- Rule.cs
- RIPEMD160.cs
- FixedFlowMap.cs
- PropertyChangingEventArgs.cs
- TypeElementCollection.cs
- PointHitTestParameters.cs
- EmptyControlCollection.cs
- SystemIPv4InterfaceProperties.cs
- WebHeaderCollection.cs
- UpdateManifestForBrowserApplication.cs
- ListBox.cs
- ClientSection.cs
- WebBrowsableAttribute.cs
- DataSourceExpressionCollection.cs
- XmlDictionary.cs
- BookmarkTable.cs
- HeaderedContentControl.cs
- MarkupWriter.cs
- ConstNode.cs
- Variant.cs
- Point3DAnimationBase.cs
- TextElement.cs
- AsmxEndpointPickerExtension.cs
- BackgroundFormatInfo.cs
- CommandConverter.cs
- CrossAppDomainChannel.cs
- ProfileSettingsCollection.cs
- MenuBase.cs
- PointUtil.cs
- MexHttpBindingCollectionElement.cs
- ExceptionHelpers.cs
- ListenerHandler.cs
- HandlerBase.cs
- PixelFormatConverter.cs
- WebZone.cs
- ObservableCollection.cs
- DataServiceExpressionVisitor.cs
- DataTableReaderListener.cs
- CodeConstructor.cs
- TextRunCacheImp.cs
- InternalsVisibleToAttribute.cs
- Domain.cs
- QilTypeChecker.cs
- UpdateCommand.cs
- TextTrailingWordEllipsis.cs
- Random.cs
- BitmapEffectState.cs
- BitmapEffectInput.cs
- Helpers.cs
- SqlUtils.cs
- SqlNodeAnnotation.cs
- UpdatePanelTriggerCollection.cs
- AsyncSerializedWorker.cs
- ShimAsPublicXamlType.cs
- PluralizationServiceUtil.cs
- SqlDelegatedTransaction.cs
- WebPartZone.cs
- AdapterDictionary.cs
- SecurityPolicyVersion.cs
- RawStylusInputCustomData.cs
- DSACryptoServiceProvider.cs
- DetailsViewCommandEventArgs.cs
- ProgressPage.cs
- GlobalItem.cs
- ListViewSortEventArgs.cs
- DispatcherEventArgs.cs
- SystemIPInterfaceStatistics.cs
- RevocationPoint.cs
- SessionPageStatePersister.cs
- GregorianCalendar.cs