Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / 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. //------------------------------------------------------------------------------ //// 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- KnownColorTable.cs
- WindowsGraphicsCacheManager.cs
- XmlSchema.cs
- SHA1.cs
- IMembershipProvider.cs
- XmlName.cs
- PointAnimationUsingPath.cs
- UInt64Converter.cs
- KnowledgeBase.cs
- ContextStaticAttribute.cs
- DataSourceUtil.cs
- SmtpClient.cs
- MaskedTextProvider.cs
- PolyLineSegment.cs
- CryptoConfig.cs
- AppDomain.cs
- ExpressionVisitorHelpers.cs
- ReverseInheritProperty.cs
- ElementMarkupObject.cs
- ProtocolsConfigurationHandler.cs
- StateInitializationDesigner.cs
- QueueProcessor.cs
- EpmTargetTree.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- IPCCacheManager.cs
- PrimitiveXmlSerializers.cs
- WebBrowser.cs
- FileLevelControlBuilderAttribute.cs
- TextTreeUndoUnit.cs
- HtmlLinkAdapter.cs
- StateItem.cs
- MenuEventArgs.cs
- XmlSchemaSimpleContentExtension.cs
- DropSource.cs
- PersistenceTypeAttribute.cs
- DrawingBrush.cs
- DataRelationPropertyDescriptor.cs
- Base64Encoder.cs
- ProfilePropertySettingsCollection.cs
- MimeReturn.cs
- AdornerLayer.cs
- PenContext.cs
- TextRangeAdaptor.cs
- DrawingContextWalker.cs
- Timer.cs
- ToolStripLabel.cs
- ContentValidator.cs
- BaseProcessor.cs
- RepeatBehaviorConverter.cs
- NextPreviousPagerField.cs
- HtmlInputPassword.cs
- RtType.cs
- _FixedSizeReader.cs
- LoginCancelEventArgs.cs
- AppModelKnownContentFactory.cs
- PrintDialog.cs
- DataGridViewCellValueEventArgs.cs
- DuplexSecurityProtocolFactory.cs
- FunctionDescription.cs
- X509AudioLogo.cs
- OpenTypeCommon.cs
- HtmlElementCollection.cs
- ObjRef.cs
- AppSettingsExpressionBuilder.cs
- XPathDocumentBuilder.cs
- StringFormat.cs
- ResourceAttributes.cs
- FormViewCommandEventArgs.cs
- BasePattern.cs
- WorkflowMessageEventHandler.cs
- MenuBindingsEditor.cs
- FixedFlowMap.cs
- SpeakInfo.cs
- LambdaCompiler.cs
- Transform.cs
- DesignerCategoryAttribute.cs
- TrustLevel.cs
- XmlAnyElementAttribute.cs
- SecurityBindingElement.cs
- COSERVERINFO.cs
- OleDbFactory.cs
- MetadataUtilsSmi.cs
- HtmlTernaryTree.cs
- MsiStyleLogWriter.cs
- ReadOnlyDataSourceView.cs
- WSFederationHttpBindingCollectionElement.cs
- ToolConsole.cs
- AsymmetricSignatureFormatter.cs
- ReceiveMessageContent.cs
- DesignUtil.cs
- OrderByBuilder.cs
- RepeaterItem.cs
- RegistryDataKey.cs
- ReadOnlyTernaryTree.cs
- PropertyDescriptor.cs
- SystemResourceKey.cs
- ProfileParameter.cs
- ArraySortHelper.cs
- PackagingUtilities.cs
- TableRow.cs