Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Util / SystemInfo.cs / 1305376 / 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
- TypeLibraryHelper.cs
- HitTestResult.cs
- NestedContainer.cs
- RangeContentEnumerator.cs
- DoubleCollection.cs
- TemplateField.cs
- DataGridViewCellFormattingEventArgs.cs
- BinHexEncoder.cs
- MsmqIntegrationProcessProtocolHandler.cs
- Tile.cs
- LinkClickEvent.cs
- TextLine.cs
- ReachUIElementCollectionSerializerAsync.cs
- PackageStore.cs
- ListViewUpdatedEventArgs.cs
- StreamProxy.cs
- ComboBoxRenderer.cs
- XmlDataSourceView.cs
- NavigationCommands.cs
- FilteredAttributeCollection.cs
- ParameterCollection.cs
- SwitchLevelAttribute.cs
- Guid.cs
- _SSPISessionCache.cs
- HtmlContainerControl.cs
- EventLogConfiguration.cs
- altserialization.cs
- ViewStateModeByIdAttribute.cs
- SpeechSynthesizer.cs
- WmlFormAdapter.cs
- TreeViewAutomationPeer.cs
- InputLanguageManager.cs
- OletxCommittableTransaction.cs
- XmlHierarchicalDataSourceView.cs
- PolicyChain.cs
- MachineKeyValidationConverter.cs
- CodeAccessSecurityEngine.cs
- TreeNodeStyleCollection.cs
- BitmapImage.cs
- DiffuseMaterial.cs
- InfiniteTimeSpanConverter.cs
- SecurityException.cs
- HwndSource.cs
- UriSectionData.cs
- InvalidProgramException.cs
- IIS7WorkerRequest.cs
- BrushConverter.cs
- EntityException.cs
- Serializer.cs
- FormViewDeletedEventArgs.cs
- PartialList.cs
- WsatServiceAddress.cs
- MinMaxParagraphWidth.cs
- DBCommandBuilder.cs
- SelfIssuedAuthProofToken.cs
- DispatchChannelSink.cs
- COM2IProvidePropertyBuilderHandler.cs
- BezierSegment.cs
- AutomationPropertyInfo.cs
- ModelPerspective.cs
- LockRecursionException.cs
- DesignTimeParseData.cs
- SearchForVirtualItemEventArgs.cs
- ResourceAttributes.cs
- AttributeSetAction.cs
- Rfc4050KeyFormatter.cs
- GeometryGroup.cs
- WebPartEditVerb.cs
- LinkLabelLinkClickedEvent.cs
- CompositionAdorner.cs
- ContentPosition.cs
- ObjectParameterCollection.cs
- ProfileParameter.cs
- CapabilitiesAssignment.cs
- CallbackValidatorAttribute.cs
- Journal.cs
- TableCellsCollectionEditor.cs
- RelationshipWrapper.cs
- RegexBoyerMoore.cs
- DragCompletedEventArgs.cs
- ImageListImageEditor.cs
- RepeatInfo.cs
- ImageListStreamer.cs
- XmlEnumAttribute.cs
- AbsoluteQuery.cs
- CustomErrorsSectionWrapper.cs
- ProcessModelSection.cs
- XamlNamespaceHelper.cs
- RoleManagerEventArgs.cs
- SchemaTypeEmitter.cs
- SafeNativeMethodsMilCoreApi.cs
- ValueUnavailableException.cs
- SchemaImporterExtensionElement.cs
- XmlAttributeAttribute.cs
- cookieexception.cs
- HtmlTextBoxAdapter.cs
- COM2ExtendedUITypeEditor.cs
- PointAnimationUsingKeyFrames.cs
- CookieParameter.cs
- XmlCustomFormatter.cs