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
- MaskInputRejectedEventArgs.cs
- SHA256.cs
- HtmlTernaryTree.cs
- UriExt.cs
- ObjectListCommandCollection.cs
- KeyConverter.cs
- SlotInfo.cs
- future.cs
- AlphabetConverter.cs
- PreservationFileReader.cs
- TreeNodeStyle.cs
- basecomparevalidator.cs
- WindowsListViewItemCheckBox.cs
- ComponentConverter.cs
- MonikerUtility.cs
- Transform3DCollection.cs
- DirtyTextRange.cs
- ContainerUIElement3D.cs
- GPRECT.cs
- WebPartUtil.cs
- TextBlock.cs
- ParameterEditorUserControl.cs
- AssemblyResourceLoader.cs
- recordstatescratchpad.cs
- XmlNodeChangedEventManager.cs
- IdleTimeoutMonitor.cs
- EmbeddedMailObject.cs
- AutomationPropertyInfo.cs
- TraceRecords.cs
- SystemNetHelpers.cs
- PageContentCollection.cs
- SqlGatherProducedAliases.cs
- TextEditor.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- BehaviorEditorPart.cs
- OleAutBinder.cs
- ThreadStateException.cs
- ConnectionStringsExpressionBuilder.cs
- ListBoxItemAutomationPeer.cs
- SqlRewriteScalarSubqueries.cs
- Parsers.cs
- WinCategoryAttribute.cs
- EntityDataSourceWrapper.cs
- MetadataItem_Static.cs
- PointAnimation.cs
- NegotiateStream.cs
- OutputCacheSettingsSection.cs
- PreviewKeyDownEventArgs.cs
- SynchronizationContext.cs
- LayoutManager.cs
- ArithmeticException.cs
- DbProviderServices.cs
- mediaeventargs.cs
- DefaultClaimSet.cs
- TreeNode.cs
- SessionStateSection.cs
- IpcManager.cs
- SQLByteStorage.cs
- IProducerConsumerCollection.cs
- OracleMonthSpan.cs
- InputReport.cs
- EndEvent.cs
- RIPEMD160.cs
- XmlSerializerVersionAttribute.cs
- AdRotator.cs
- TdsEnums.cs
- SafeRightsManagementHandle.cs
- X509Chain.cs
- ProxyHwnd.cs
- propertytag.cs
- XmlDocumentFieldSchema.cs
- TCPListener.cs
- AssemblyBuilder.cs
- TypeSystemProvider.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- KeyedPriorityQueue.cs
- CompositeFontFamily.cs
- RawStylusInputCustomData.cs
- HttpCookie.cs
- LinqDataSourceContextData.cs
- WmlFormAdapter.cs
- BoundField.cs
- Schema.cs
- LicenseManager.cs
- OdbcConnectionPoolProviderInfo.cs
- SiteMapNodeCollection.cs
- SchemaObjectWriter.cs
- CollectionView.cs
- EmulateRecognizeCompletedEventArgs.cs
- NetNamedPipeBinding.cs
- CustomExpressionEventArgs.cs
- Visual3D.cs
- _SpnDictionary.cs
- Selection.cs
- MimeImporter.cs
- FrameSecurityDescriptor.cs
- UserControl.cs
- X509CertificateInitiatorClientCredential.cs
- ExpressionQuoter.cs
- Console.cs