Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- SafeNativeMethodsOther.cs
- ForeignKeyConstraint.cs
- MarshalByValueComponent.cs
- SamlSecurityToken.cs
- PrintEvent.cs
- InteropAutomationProvider.cs
- DbTransaction.cs
- GridItemCollection.cs
- DoubleLink.cs
- Vertex.cs
- WinInet.cs
- TimeSpan.cs
- SoapAttributeAttribute.cs
- InstancePersistenceCommand.cs
- HeaderElement.cs
- DiscardableAttribute.cs
- CollectionsUtil.cs
- ColorComboBox.cs
- BackEase.cs
- FilterEventArgs.cs
- MessageSmuggler.cs
- SafeCertificateContext.cs
- updateconfighost.cs
- ArgumentNullException.cs
- KeyInterop.cs
- AppSecurityManager.cs
- Trace.cs
- DataGridViewSelectedColumnCollection.cs
- TextServicesHost.cs
- Debugger.cs
- ManifestBasedResourceGroveler.cs
- SecurityTokenParameters.cs
- Codec.cs
- XPathPatternBuilder.cs
- RayHitTestParameters.cs
- FaultDesigner.cs
- WeakReferenceEnumerator.cs
- HostingEnvironment.cs
- DeclaredTypeValidatorAttribute.cs
- WebResponse.cs
- ColumnCollection.cs
- HtmlToClrEventProxy.cs
- Matrix3DConverter.cs
- JsonEnumDataContract.cs
- CustomBinding.cs
- Utils.cs
- WizardPanelChangingEventArgs.cs
- HMACSHA512.cs
- EncryptedReference.cs
- DataServiceCollectionOfT.cs
- DefaultTextStore.cs
- XmlDomTextWriter.cs
- PasswordBox.cs
- ProxyWebPart.cs
- TimeSpanStorage.cs
- CompositeFontInfo.cs
- Icon.cs
- FieldToken.cs
- PowerModeChangedEventArgs.cs
- CodeVariableDeclarationStatement.cs
- IApplicationTrustManager.cs
- WorkflowMarkupSerializerMapping.cs
- SqlConnectionHelper.cs
- SqlRemoveConstantOrderBy.cs
- HtmlInputHidden.cs
- AnimationStorage.cs
- DragCompletedEventArgs.cs
- WebPartUserCapability.cs
- MonthCalendar.cs
- QualifiedCellIdBoolean.cs
- ReadOnlyCollection.cs
- FileDialog_Vista.cs
- CollectionView.cs
- ParameterToken.cs
- Gdiplus.cs
- ConditionBrowserDialog.cs
- OletxTransactionManager.cs
- BindingExpressionUncommonField.cs
- PrintDialog.cs
- DataGridColumn.cs
- XamlReaderHelper.cs
- PeerPresenceInfo.cs
- PeerCustomResolverSettings.cs
- InvalidOleVariantTypeException.cs
- OpenTypeCommon.cs
- EditorPartChrome.cs
- ResourcePart.cs
- DataObjectEventArgs.cs
- SecurityProtocolFactory.cs
- ReplyChannel.cs
- EncryptedPackage.cs
- XmlSchemaExporter.cs
- CodeTypeParameter.cs
- SqlDataSourceStatusEventArgs.cs
- EasingKeyFrames.cs
- IsolatedStoragePermission.cs
- HandlerWithFactory.cs
- XmlEntityReference.cs
- DataException.cs
- Misc.cs