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
- ToolboxItemCollection.cs
- CompilerScope.Storage.cs
- OperatingSystem.cs
- TransactionCache.cs
- XmlSerializationGeneratedCode.cs
- SchemaContext.cs
- DataServiceClientException.cs
- ColumnResult.cs
- Int64.cs
- DrawingAttributes.cs
- UrlMappingsSection.cs
- SecondaryViewProvider.cs
- UrlRoutingHandler.cs
- ExeContext.cs
- TextTreeTextNode.cs
- SourceFileInfo.cs
- ADMembershipUser.cs
- FrameAutomationPeer.cs
- XmlExtensionFunction.cs
- XmlUrlResolver.cs
- DataControlPagerLinkButton.cs
- DataGridViewHitTestInfo.cs
- IpcServerChannel.cs
- precedingsibling.cs
- RSACryptoServiceProvider.cs
- ArrowControl.xaml.cs
- MembershipSection.cs
- Window.cs
- TextBreakpoint.cs
- ContentFilePart.cs
- HandleRef.cs
- PhotoPrintingIntent.cs
- DataGridLinkButton.cs
- Win32MouseDevice.cs
- AssemblyFilter.cs
- NativeMethods.cs
- RoutedEventHandlerInfo.cs
- XmlSchemaSimpleContent.cs
- TypePresenter.xaml.cs
- KeyValuePair.cs
- DataGridViewImageCell.cs
- TdsParserSessionPool.cs
- FileSystemInfo.cs
- StaticDataManager.cs
- TransportSecurityHelpers.cs
- HttpChannelHelper.cs
- XPathDocumentIterator.cs
- DecimalStorage.cs
- BaseDataListComponentEditor.cs
- GridViewDeletedEventArgs.cs
- Point3DCollection.cs
- EndpointInfo.cs
- DateTimeFormatInfo.cs
- OleDbEnumerator.cs
- RemoteWebConfigurationHostServer.cs
- AspNetRouteServiceHttpHandler.cs
- IisTraceListener.cs
- SQLInt16Storage.cs
- objectquery_tresulttype.cs
- TypeBuilder.cs
- FrameworkContentElement.cs
- PrimaryKeyTypeConverter.cs
- GlobalAllocSafeHandle.cs
- DSASignatureFormatter.cs
- ColorAnimationUsingKeyFrames.cs
- SQLMembershipProvider.cs
- TypeUtil.cs
- XamlStream.cs
- _HTTPDateParse.cs
- InputLangChangeEvent.cs
- XmlHelper.cs
- UIPermission.cs
- EnumType.cs
- ProcessInputEventArgs.cs
- CreatingCookieEventArgs.cs
- WorkflowQueuingService.cs
- HtmlSelect.cs
- ResourceDisplayNameAttribute.cs
- _SSPISessionCache.cs
- RoleManagerSection.cs
- SqlInternalConnection.cs
- SessionPageStatePersister.cs
- MetaTableHelper.cs
- DataGridViewRowEventArgs.cs
- SqlWriter.cs
- NullableBoolConverter.cs
- IsolatedStorageFileStream.cs
- HttpConfigurationContext.cs
- DataPagerCommandEventArgs.cs
- Parameter.cs
- SuppressMergeCheckAttribute.cs
- SafeHandles.cs
- ZipIOModeEnforcingStream.cs
- StreamWithDictionary.cs
- AutomationIdentifier.cs
- WorkItem.cs
- DataRecordInternal.cs
- ThreadStaticAttribute.cs
- ProtectedProviderSettings.cs
- initElementDictionary.cs