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
- DataGridViewImageColumn.cs
- TransformerTypeCollection.cs
- SplashScreenNativeMethods.cs
- HMACSHA512.cs
- NamedObject.cs
- ParentQuery.cs
- HostingEnvironmentSection.cs
- PageAsyncTaskManager.cs
- TemplateControlCodeDomTreeGenerator.cs
- OleDbInfoMessageEvent.cs
- SharedConnectionInfo.cs
- MULTI_QI.cs
- DrawListViewItemEventArgs.cs
- OpCodes.cs
- OperationPickerDialog.cs
- XamlTypeWithExplicitNamespace.cs
- DrawingCollection.cs
- ClientEventManager.cs
- TriState.cs
- QilPatternFactory.cs
- FileVersionInfo.cs
- EmptyWorkItem.cs
- ConnectionPoolManager.cs
- OleDbException.cs
- SqlConnectionHelper.cs
- Context.cs
- CmsInterop.cs
- DateBoldEvent.cs
- HostingEnvironmentException.cs
- ActivityCodeDomSerializer.cs
- SocketPermission.cs
- AsyncOperationManager.cs
- ApplicationTrust.cs
- DynamicRenderer.cs
- Point3DCollection.cs
- Rectangle.cs
- AnnotationObservableCollection.cs
- MessageDecoder.cs
- EFColumnProvider.cs
- UnsafeNativeMethods.cs
- GridViewRow.cs
- XpsTokenContext.cs
- IPPacketInformation.cs
- Triangle.cs
- SimpleType.cs
- SoapExtensionStream.cs
- DrawListViewColumnHeaderEventArgs.cs
- DataKey.cs
- UInt64Converter.cs
- CodeSnippetTypeMember.cs
- DataGridTableCollection.cs
- XPathMultyIterator.cs
- ExpressionQuoter.cs
- PieceNameHelper.cs
- DefaultValueTypeConverter.cs
- _ListenerRequestStream.cs
- ColorConverter.cs
- Opcode.cs
- SafeMemoryMappedViewHandle.cs
- LogWriteRestartAreaAsyncResult.cs
- ParallelDesigner.cs
- HttpCapabilitiesSectionHandler.cs
- SigningCredentials.cs
- COM2Properties.cs
- filewebresponse.cs
- KeyTimeConverter.cs
- UiaCoreApi.cs
- WebRequestModuleElementCollection.cs
- GraphicsPathIterator.cs
- DescendantOverDescendantQuery.cs
- DataGridViewUtilities.cs
- IntellisenseTextBox.designer.cs
- WindowsFormsEditorServiceHelper.cs
- CommonRemoteMemoryBlock.cs
- CriticalExceptions.cs
- DocumentPage.cs
- ViewEvent.cs
- NumberFunctions.cs
- TemplatePartAttribute.cs
- SystemFonts.cs
- Wildcard.cs
- ColorTransform.cs
- NumericUpDownAccelerationCollection.cs
- LinkedResourceCollection.cs
- PictureBox.cs
- RawMouseInputReport.cs
- TreeView.cs
- TemplateModeChangedEventArgs.cs
- ClientScriptManagerWrapper.cs
- CodeLinePragma.cs
- TextFormatter.cs
- XmlCharCheckingReader.cs
- DirectoryRootQuery.cs
- FigureHelper.cs
- ControlBindingsCollection.cs
- LogRestartAreaEnumerator.cs
- XamlPathDataSerializer.cs
- TagMapInfo.cs
- NativeMethods.cs
- PageTheme.cs