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
- NativeMethods.cs
- IntellisenseTextBox.cs
- Cell.cs
- ClientScriptManagerWrapper.cs
- SQLString.cs
- FileNotFoundException.cs
- VirtualPathProvider.cs
- MultipleViewPattern.cs
- AsmxEndpointPickerExtension.cs
- SmiRecordBuffer.cs
- TextEditorLists.cs
- BooleanExpr.cs
- ListViewItemMouseHoverEvent.cs
- WebInvokeAttribute.cs
- AudioDeviceOut.cs
- Int32KeyFrameCollection.cs
- DataRecordInternal.cs
- NegatedCellConstant.cs
- Queue.cs
- BindingsCollection.cs
- RepeaterItemCollection.cs
- ObjectViewFactory.cs
- ListViewPagedDataSource.cs
- InheritanceAttribute.cs
- XmlDataSourceView.cs
- XPathSelfQuery.cs
- CapabilitiesAssignment.cs
- CodeThrowExceptionStatement.cs
- InlinedAggregationOperator.cs
- Help.cs
- WindowsProgressbar.cs
- XmlSchemaAttributeGroupRef.cs
- InheritedPropertyDescriptor.cs
- BitStack.cs
- ProcessHostConfigUtils.cs
- EventlogProvider.cs
- XmlName.cs
- StringComparer.cs
- ContainerControl.cs
- SaveFileDialog.cs
- SerialErrors.cs
- HandlerMappingMemo.cs
- PersonalizationStateQuery.cs
- EventBuilder.cs
- ComboBoxDesigner.cs
- X509ServiceCertificateAuthentication.cs
- Panel.cs
- XmlDigitalSignatureProcessor.cs
- CodeDomDecompiler.cs
- ListViewHitTestInfo.cs
- StateBag.cs
- EffectiveValueEntry.cs
- SQLGuidStorage.cs
- OleDbParameter.cs
- XmlDataSourceNodeDescriptor.cs
- RecognizedAudio.cs
- OdbcReferenceCollection.cs
- CaseExpr.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- SchemaObjectWriter.cs
- HashMembershipCondition.cs
- Parameter.cs
- DESCryptoServiceProvider.cs
- FormViewPagerRow.cs
- DefaultPerformanceCounters.cs
- CollectionType.cs
- DrawingBrush.cs
- SqlDataSourceStatusEventArgs.cs
- XmlnsCompatibleWithAttribute.cs
- PtsHost.cs
- XamlNamespaceHelper.cs
- ChannelAcceptor.cs
- DiffuseMaterial.cs
- CompoundFileReference.cs
- FillErrorEventArgs.cs
- FrameworkElement.cs
- SchemaElementLookUpTable.cs
- StringKeyFrameCollection.cs
- XmlLanguageConverter.cs
- BindingMAnagerBase.cs
- TypeUsage.cs
- FontResourceCache.cs
- Point3DAnimationUsingKeyFrames.cs
- dbenumerator.cs
- ListView.cs
- DeploymentSection.cs
- PointLight.cs
- RijndaelManagedTransform.cs
- SHA1Managed.cs
- LinkedResourceCollection.cs
- UserControl.cs
- DateTimeParse.cs
- PrintControllerWithStatusDialog.cs
- SqlProfileProvider.cs
- EncoderNLS.cs
- _SSPISessionCache.cs
- ColumnClickEvent.cs
- ListView.cs
- GenericTypeParameterConverter.cs
- MatrixTransform3D.cs