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
- handlecollector.cs
- AuthorizationPolicyTypeElementCollection.cs
- Scripts.cs
- FileSystemWatcher.cs
- UnsafeNativeMethods.cs
- WebBrowserProgressChangedEventHandler.cs
- GAC.cs
- FontStyle.cs
- CustomCategoryAttribute.cs
- PackWebRequestFactory.cs
- ExceptionUtil.cs
- ToolTipService.cs
- RepeatButton.cs
- SharedConnectionInfo.cs
- SoapMessage.cs
- Point3DAnimationBase.cs
- Msmq4SubqueuePoisonHandler.cs
- UnauthorizedWebPart.cs
- OperatorExpressions.cs
- GridViewDeleteEventArgs.cs
- DataServiceQueryOfT.cs
- XamlDesignerSerializationManager.cs
- RectangleF.cs
- ThreadPool.cs
- CellConstant.cs
- PageSettings.cs
- XmlSchemaGroupRef.cs
- QilNode.cs
- JavascriptXmlWriterWrapper.cs
- SqlInternalConnectionTds.cs
- PrintEvent.cs
- Processor.cs
- PerformanceCounterPermissionEntry.cs
- OracleCommand.cs
- FlowLayoutSettings.cs
- SafeEventLogWriteHandle.cs
- MenuAutoFormat.cs
- ResourceExpressionEditorSheet.cs
- UpdatePanelTrigger.cs
- Clause.cs
- ValueOfAction.cs
- NegationPusher.cs
- IxmlLineInfo.cs
- UserNameSecurityToken.cs
- XslUrlEditor.cs
- MobileListItem.cs
- DrawingBrush.cs
- altserialization.cs
- TableLayoutCellPaintEventArgs.cs
- DefaultParameterValueAttribute.cs
- ClientBuildManager.cs
- ZoomingMessageFilter.cs
- VirtualPathProvider.cs
- TimeSpanMinutesConverter.cs
- StateBag.cs
- RsaKeyIdentifierClause.cs
- Image.cs
- AnimatedTypeHelpers.cs
- EastAsianLunisolarCalendar.cs
- StringOutput.cs
- CqlQuery.cs
- WindowsBrush.cs
- ProfileGroupSettingsCollection.cs
- Delegate.cs
- MetadataUtilsSmi.cs
- RoleServiceManager.cs
- TreeNodeMouseHoverEvent.cs
- SupportsEventValidationAttribute.cs
- CodeGen.cs
- DataGridViewSortCompareEventArgs.cs
- ExtendedProtectionPolicyTypeConverter.cs
- Validator.cs
- TaskDesigner.cs
- WebPartVerbsEventArgs.cs
- LockCookie.cs
- StructuredTypeInfo.cs
- EncoderNLS.cs
- FaultPropagationQuery.cs
- TextModifierScope.cs
- CodeSnippetTypeMember.cs
- SettingsProperty.cs
- LineUtil.cs
- UICuesEvent.cs
- CapiSymmetricAlgorithm.cs
- WebPartsPersonalizationAuthorization.cs
- Size.cs
- LoginCancelEventArgs.cs
- TdsEnums.cs
- CheckBoxFlatAdapter.cs
- InvalidDataException.cs
- coordinatorscratchpad.cs
- Literal.cs
- AVElementHelper.cs
- Transform.cs
- MainMenu.cs
- prefixendpointaddressmessagefilter.cs
- RowCache.cs
- HtmlSelect.cs
- StateBag.cs
- ScriptResourceAttribute.cs