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
- DataGridViewColumnCollectionEditor.cs
- BufferedWebEventProvider.cs
- DataSourceDescriptorCollection.cs
- HyperlinkAutomationPeer.cs
- TextEditorDragDrop.cs
- ComplexLine.cs
- MouseGestureConverter.cs
- CollectionEditorDialog.cs
- GridViewAutomationPeer.cs
- RegexCompiler.cs
- WindowsUpDown.cs
- sortedlist.cs
- WorkflowApplicationAbortedException.cs
- EarlyBoundInfo.cs
- ActiveXHelper.cs
- EncoderReplacementFallback.cs
- RowUpdatedEventArgs.cs
- BulletDecorator.cs
- EventlogProvider.cs
- APCustomTypeDescriptor.cs
- ToolStripManager.cs
- XmlException.cs
- SimpleTypeResolver.cs
- XPathDocumentIterator.cs
- SafeReadContext.cs
- BinHexEncoder.cs
- KeyPullup.cs
- CollectionBase.cs
- GeometryModel3D.cs
- GridSplitterAutomationPeer.cs
- TypeUsage.cs
- ControlAdapter.cs
- HtmlTableCell.cs
- WindowsTab.cs
- SerializationInfoEnumerator.cs
- MachinePropertyVariants.cs
- SqlFunctionAttribute.cs
- FormViewPageEventArgs.cs
- ArraySegment.cs
- ProgressBarHighlightConverter.cs
- BindableAttribute.cs
- SafeWaitHandle.cs
- DesignerActionService.cs
- XmlUrlResolver.cs
- HtmlGenericControl.cs
- SelectionProcessor.cs
- XmlReader.cs
- DeflateStreamAsyncResult.cs
- SignalGate.cs
- CodeTypeReference.cs
- IPAddress.cs
- SQLBinary.cs
- ArrayTypeMismatchException.cs
- ConfigurationManagerHelperFactory.cs
- CompilerCollection.cs
- ProcessHostMapPath.cs
- XmlSchemaValidationException.cs
- FormattedTextSymbols.cs
- PixelFormats.cs
- XmlDataSource.cs
- ImageSource.cs
- ParameterModifier.cs
- DataGridViewCellParsingEventArgs.cs
- FileDialog_Vista_Interop.cs
- SqlInfoMessageEvent.cs
- LinqDataSourceSelectEventArgs.cs
- __Error.cs
- ExtendedPropertyCollection.cs
- HostingPreferredMapPath.cs
- AllMembershipCondition.cs
- ClientTarget.cs
- DecoderReplacementFallback.cs
- LiteralControl.cs
- ClientScriptManagerWrapper.cs
- Pkcs7Signer.cs
- AuthStoreRoleProvider.cs
- HierarchicalDataTemplate.cs
- OpenTypeLayout.cs
- Compiler.cs
- ObjectItemAttributeAssemblyLoader.cs
- ListControlDataBindingHandler.cs
- DataBoundControlHelper.cs
- Style.cs
- TdsParserHelperClasses.cs
- ZoneIdentityPermission.cs
- PriorityBinding.cs
- PropertyHelper.cs
- XmlQueryContext.cs
- TableMethodGenerator.cs
- ObjectMemberMapping.cs
- BinaryObjectReader.cs
- FrameworkRichTextComposition.cs
- ViewBox.cs
- ReferencedAssemblyResolver.cs
- ContentPropertyAttribute.cs
- AuthenticationServiceManager.cs
- PLINQETWProvider.cs
- Types.cs
- MessageContractExporter.cs
- DirectoryInfo.cs