Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- ElementUtil.cs
- XsltSettings.cs
- TokenizerHelper.cs
- OutputCacheModule.cs
- StreamInfo.cs
- AppSecurityManager.cs
- SQLChars.cs
- GridItem.cs
- HtmlShim.cs
- DesignOnlyAttribute.cs
- BrowserCapabilitiesFactoryBase.cs
- _Semaphore.cs
- XmlSchemaProviderAttribute.cs
- TextFormatterImp.cs
- PerfService.cs
- PropertyDescriptor.cs
- CompModSwitches.cs
- ListChunk.cs
- CfgSemanticTag.cs
- XsltSettings.cs
- WebServiceEnumData.cs
- AnimatedTypeHelpers.cs
- BindingElement.cs
- CopyOfAction.cs
- BuildDependencySet.cs
- Region.cs
- InputLanguageSource.cs
- PageDeviceFont.cs
- PageAsyncTaskManager.cs
- ToolStripItemRenderEventArgs.cs
- ContentDisposition.cs
- InternalBase.cs
- WizardStepBase.cs
- RegexStringValidatorAttribute.cs
- SqlTypeConverter.cs
- DataGridTextColumn.cs
- ScrollPatternIdentifiers.cs
- WebBrowserSiteBase.cs
- FontClient.cs
- TreeNodeStyle.cs
- FormClosedEvent.cs
- AmbientValueAttribute.cs
- MappingSource.cs
- KeyValuePair.cs
- DocumentViewerConstants.cs
- AttributeAction.cs
- COM2ComponentEditor.cs
- PasswordDeriveBytes.cs
- DataListDesigner.cs
- BulletDecorator.cs
- SqlCharStream.cs
- EventOpcode.cs
- DataGridViewSelectedCellCollection.cs
- ClassGenerator.cs
- COM2Enum.cs
- XPathMultyIterator.cs
- DataGridViewSelectedRowCollection.cs
- SizeFConverter.cs
- FixedDocument.cs
- ITreeGenerator.cs
- CodeSubDirectory.cs
- _PooledStream.cs
- TimeSpanValidator.cs
- FactoryId.cs
- Internal.cs
- TerminatorSinks.cs
- RelatedCurrencyManager.cs
- TableColumn.cs
- LZCodec.cs
- FrameAutomationPeer.cs
- SerializerProvider.cs
- WebBrowserPermission.cs
- DataGridViewAdvancedBorderStyle.cs
- wmiutil.cs
- XslTransform.cs
- Thumb.cs
- JapaneseLunisolarCalendar.cs
- OdbcUtils.cs
- Button.cs
- NativeStructs.cs
- CodeParameterDeclarationExpressionCollection.cs
- DBBindings.cs
- OracleBoolean.cs
- SetterBase.cs
- ServicesUtilities.cs
- ContractTypeNameCollection.cs
- InternalPermissions.cs
- Win32Exception.cs
- HeaderLabel.cs
- KeyTimeConverter.cs
- DecoderFallback.cs
- RequestUriProcessor.cs
- UnmanagedMemoryStream.cs
- RestHandler.cs
- Point4DValueSerializer.cs
- FontFamilyConverter.cs
- TableDetailsCollection.cs
- CachedFontFamily.cs
- EntitySqlException.cs
- _ListenerResponseStream.cs