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
- MenuScrollingVisibilityConverter.cs
- DataTableReader.cs
- ServiceBehaviorElement.cs
- LabelAutomationPeer.cs
- OraclePermission.cs
- ImageClickEventArgs.cs
- CodeArrayIndexerExpression.cs
- Attributes.cs
- DesignTimeValidationFeature.cs
- ExpressionBuilder.cs
- DecoratedNameAttribute.cs
- GPRECT.cs
- WeakEventTable.cs
- DocumentEventArgs.cs
- ObjectAnimationBase.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- StylusCaptureWithinProperty.cs
- MdiWindowListItemConverter.cs
- DataSourceControlBuilder.cs
- IItemContainerGenerator.cs
- DeviceContexts.cs
- GeneralTransform3D.cs
- CodeCompileUnit.cs
- RawContentTypeMapper.cs
- EventWaitHandleSecurity.cs
- WinEventHandler.cs
- ArrangedElementCollection.cs
- EntityDescriptor.cs
- EntityDataSourceContextCreatedEventArgs.cs
- WebPartConnectionCollection.cs
- DataBindingValueUIHandler.cs
- PointLightBase.cs
- DataSourceDesigner.cs
- AuthorizationRuleCollection.cs
- DataGridViewCellStyle.cs
- SqlDataSourceEnumerator.cs
- BigInt.cs
- NamespaceQuery.cs
- SafeRightsManagementSessionHandle.cs
- SerializationAttributes.cs
- NotifyParentPropertyAttribute.cs
- CompilerError.cs
- WebScriptMetadataFormatter.cs
- ToolBar.cs
- ExceptionUtil.cs
- RtfToXamlLexer.cs
- ClientTargetCollection.cs
- Helper.cs
- AuthenticationServiceManager.cs
- MimeTypePropertyAttribute.cs
- PtsCache.cs
- ContextProperty.cs
- AdapterUtil.cs
- ClientSponsor.cs
- EventLogWatcher.cs
- GridViewAutomationPeer.cs
- HierarchicalDataSourceControl.cs
- ControlPropertyNameConverter.cs
- SignedInfo.cs
- Parameter.cs
- Model3D.cs
- ColorTransform.cs
- DataViewSetting.cs
- TypeResolvingOptions.cs
- PathGradientBrush.cs
- ListViewInsertedEventArgs.cs
- ResourceAssociationSetEnd.cs
- PasswordDeriveBytes.cs
- XmlEncoding.cs
- ProfilePropertyMetadata.cs
- LoadItemsEventArgs.cs
- ReservationCollection.cs
- QueryStatement.cs
- LocationReferenceValue.cs
- RuntimeConfig.cs
- DateTimeFormatInfoScanner.cs
- TreeNodeStyle.cs
- StaticFileHandler.cs
- HatchBrush.cs
- CreateUserWizardStep.cs
- WindowsSysHeader.cs
- COM2IDispatchConverter.cs
- SqlConnectionFactory.cs
- WorkflowViewService.cs
- CellConstantDomain.cs
- OperationGenerator.cs
- ClientBuildManager.cs
- KeyTime.cs
- TimeZoneInfo.cs
- GifBitmapDecoder.cs
- updatecommandorderer.cs
- GraphicsPath.cs
- WebBrowser.cs
- WebPartDisplayModeEventArgs.cs
- PasswordDeriveBytes.cs
- EntityDataSourceContextDisposingEventArgs.cs
- serverconfig.cs
- LoadedOrUnloadedOperation.cs
- SmiMetaDataProperty.cs
- BuildProvider.cs