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
- XMLSyntaxException.cs
- GlyphingCache.cs
- SerializerDescriptor.cs
- InvalidCommandTreeException.cs
- OwnerDrawPropertyBag.cs
- ProfessionalColorTable.cs
- EdmSchemaError.cs
- SingletonInstanceContextProvider.cs
- LinkedResourceCollection.cs
- CreateUserWizardStep.cs
- ObjectContextServiceProvider.cs
- Menu.cs
- LockingPersistenceProvider.cs
- WindowCollection.cs
- TextBox.cs
- AspNetHostingPermission.cs
- SafeRegistryHandle.cs
- WebBrowserEvent.cs
- XamlSerializerUtil.cs
- UInt16.cs
- CompositeClientFormatter.cs
- DesigntimeLicenseContext.cs
- ContentPosition.cs
- AddInContractAttribute.cs
- SqlDataReader.cs
- SamlAssertionKeyIdentifierClause.cs
- Rotation3D.cs
- WorkflowView.cs
- UnsignedPublishLicense.cs
- EncryptedReference.cs
- UiaCoreApi.cs
- OdbcError.cs
- DataServiceClientException.cs
- OleDbReferenceCollection.cs
- GcSettings.cs
- NeutralResourcesLanguageAttribute.cs
- SupportsEventValidationAttribute.cs
- HttpRequestCacheValidator.cs
- Content.cs
- WindowsScroll.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- StatusBarPanelClickEvent.cs
- SchemaElementDecl.cs
- Int32KeyFrameCollection.cs
- Transform3DGroup.cs
- PasswordBox.cs
- ResourceCategoryAttribute.cs
- ThreadInterruptedException.cs
- KeyedCollection.cs
- NavigateEvent.cs
- StringCollection.cs
- X509CertificateTokenFactoryCredential.cs
- FigureParagraph.cs
- StringTraceRecord.cs
- QueryOperator.cs
- FontFamilyConverter.cs
- HtmlInputReset.cs
- XmlILIndex.cs
- CharUnicodeInfo.cs
- WebPartTransformer.cs
- DateTimePickerDesigner.cs
- DesignerVerb.cs
- SymLanguageVendor.cs
- SplitContainer.cs
- Span.cs
- BasePattern.cs
- InvalidWMPVersionException.cs
- ConfigurationException.cs
- HttpApplication.cs
- FlowLayout.cs
- HttpResponseHeader.cs
- CardSpaceShim.cs
- ProfileGroupSettings.cs
- Tuple.cs
- ReadOnlyPropertyMetadata.cs
- remotingproxy.cs
- ThousandthOfEmRealDoubles.cs
- ObjectDataSourceView.cs
- loginstatus.cs
- PartialArray.cs
- CounterSetInstanceCounterDataSet.cs
- Comparer.cs
- MimeAnyImporter.cs
- CookielessHelper.cs
- COAUTHINFO.cs
- DocumentReference.cs
- SamlSubjectStatement.cs
- XPathNavigatorReader.cs
- CustomWebEventKey.cs
- shaperfactoryquerycachekey.cs
- DataListItem.cs
- SubstitutionList.cs
- parserscommon.cs
- HelpKeywordAttribute.cs
- X509SecurityToken.cs
- BinaryCommonClasses.cs
- ObjectDataSource.cs
- Graph.cs
- Win32Exception.cs
- GeometryValueSerializer.cs