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
- BitmapFrame.cs
- VScrollBar.cs
- CriticalExceptions.cs
- BindingGraph.cs
- CheckBoxBaseAdapter.cs
- SmiRequestExecutor.cs
- ObjectViewListener.cs
- CellQuery.cs
- RegexMatchCollection.cs
- HorizontalAlignConverter.cs
- HtmlTernaryTree.cs
- ArrayExtension.cs
- PresentationTraceSources.cs
- ClientScriptManagerWrapper.cs
- CharacterBufferReference.cs
- LookupNode.cs
- WebBrowserHelper.cs
- SolidColorBrush.cs
- MultiAsyncResult.cs
- AssemblyBuilder.cs
- StringUtil.cs
- ColumnMapVisitor.cs
- SoundPlayerAction.cs
- XmlILOptimizerVisitor.cs
- ImportContext.cs
- DBCommand.cs
- DeleteWorkflowOwnerCommand.cs
- WebPartsPersonalization.cs
- DataFieldEditor.cs
- ReflectEventDescriptor.cs
- EncryptedPackageFilter.cs
- _ChunkParse.cs
- SrgsGrammarCompiler.cs
- PropertyValidationContext.cs
- WebFormDesignerActionService.cs
- ErrorEventArgs.cs
- PreviewKeyDownEventArgs.cs
- OrderedDictionaryStateHelper.cs
- CryptoProvider.cs
- RbTree.cs
- SystemIPInterfaceStatistics.cs
- TextBox.cs
- IntSecurity.cs
- ArgIterator.cs
- XamlBuildProvider.cs
- ConfigurationStrings.cs
- HMACSHA512.cs
- IpcServerChannel.cs
- ClientTargetCollection.cs
- EdmMember.cs
- ExitEventArgs.cs
- MultiTouchSystemGestureLogic.cs
- XamlTypeMapper.cs
- ContentElement.cs
- TextParagraphCache.cs
- StrongBox.cs
- SHA512Managed.cs
- SymLanguageType.cs
- Table.cs
- InstanceKeyNotReadyException.cs
- TableRowGroup.cs
- DocumentSchemaValidator.cs
- VBIdentifierTrimConverter.cs
- Selection.cs
- ObjectKeyFrameCollection.cs
- XmlSchemaExporter.cs
- PropertySegmentSerializer.cs
- Vector3DAnimationUsingKeyFrames.cs
- DrawingContext.cs
- FileCodeGroup.cs
- ContextQuery.cs
- HtmlInputImage.cs
- OdbcConnectionString.cs
- RMEnrollmentPage2.cs
- WinInetCache.cs
- MatrixTransform3D.cs
- QueryExpr.cs
- WebConfigurationHostFileChange.cs
- BindingOperations.cs
- JsonByteArrayDataContract.cs
- WriteableOnDemandPackagePart.cs
- SqlDataReaderSmi.cs
- SafeThemeHandle.cs
- ApplicationServicesHostFactory.cs
- CustomTrackingRecord.cs
- XmlSchemaCompilationSettings.cs
- DataGridAutoFormat.cs
- Faults.cs
- PkcsMisc.cs
- TemplatedWizardStep.cs
- Effect.cs
- DataGridParentRows.cs
- BaseCollection.cs
- DateTimeSerializationSection.cs
- SQLString.cs
- HtmlElementErrorEventArgs.cs
- DrawingContextDrawingContextWalker.cs
- Privilege.cs
- DelegateArgumentReference.cs
- MultipartIdentifier.cs