Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / 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. //------------------------------------------------------------------------------ //// 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebServiceEnumData.cs
- ProviderSettings.cs
- Literal.cs
- DataRowComparer.cs
- EFAssociationProvider.cs
- EDesignUtil.cs
- PropertyPushdownHelper.cs
- XhtmlBasicValidatorAdapter.cs
- EntityContainerEntitySet.cs
- SqlCacheDependencyDatabaseCollection.cs
- OdbcStatementHandle.cs
- DataGridParentRows.cs
- InputScope.cs
- BoolLiteral.cs
- ParameterElement.cs
- FunctionImportMapping.cs
- ClosableStream.cs
- ProtocolViolationException.cs
- WorkflowOperationBehavior.cs
- FlowDocumentReader.cs
- EnumValAlphaComparer.cs
- SettingsAttributes.cs
- Console.cs
- NamedPipeTransportElement.cs
- CatalogPartCollection.cs
- Wildcard.cs
- ModelPerspective.cs
- DataGridHelper.cs
- TreeNodeEventArgs.cs
- OracleBinary.cs
- DataError.cs
- DataPointer.cs
- PrintPreviewControl.cs
- XmlTypeAttribute.cs
- DataExpression.cs
- MethodImplAttribute.cs
- WebPartCancelEventArgs.cs
- AutomationPropertyChangedEventArgs.cs
- XmlWellformedWriter.cs
- GiveFeedbackEventArgs.cs
- CodeEntryPointMethod.cs
- BufferedWebEventProvider.cs
- DoubleLinkList.cs
- XmlSchemaObject.cs
- XmlSchemaElement.cs
- path.cs
- RegexCaptureCollection.cs
- Descriptor.cs
- XmlSerializerAssemblyAttribute.cs
- ValueOfAction.cs
- ElementUtil.cs
- ObjectDataSourceDisposingEventArgs.cs
- Delay.cs
- TrustManager.cs
- InputMethodStateChangeEventArgs.cs
- TableRow.cs
- StylusPointCollection.cs
- XmlWrappingWriter.cs
- ValidationErrorCollection.cs
- MessageBox.cs
- DictionaryManager.cs
- FontFamily.cs
- StandardToolWindows.cs
- Array.cs
- CatalogZone.cs
- DataErrorValidationRule.cs
- LineServicesCallbacks.cs
- SecurityTokenTypes.cs
- ReferencedCollectionType.cs
- SessionStateModule.cs
- AssemblyCache.cs
- XamlToRtfWriter.cs
- TemplatePropertyEntry.cs
- COM2ExtendedUITypeEditor.cs
- WebException.cs
- TeredoHelper.cs
- ArrangedElementCollection.cs
- OutputWindow.cs
- XhtmlBasicPhoneCallAdapter.cs
- KeyValueConfigurationElement.cs
- WasAdminWrapper.cs
- Privilege.cs
- DataGridViewColumnConverter.cs
- MexTcpBindingCollectionElement.cs
- MarshalDirectiveException.cs
- PaperSource.cs
- FixedDocumentPaginator.cs
- TextContainer.cs
- BindingFormattingDialog.cs
- TreeNodeStyleCollectionEditor.cs
- FilterEventArgs.cs
- SqlStream.cs
- QueryStringParameter.cs
- WinFormsSecurity.cs
- SerializationHelper.cs
- RowsCopiedEventArgs.cs
- DataRecordObjectView.cs
- HotSpot.cs
- AnimationStorage.cs
- CellParagraph.cs