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
- ContentElementAutomationPeer.cs
- DataControlFieldHeaderCell.cs
- ToolboxItemCollection.cs
- _SslSessionsCache.cs
- TransactionManager.cs
- SafeNativeMethods.cs
- TextEditorTyping.cs
- SqlRetyper.cs
- StyleModeStack.cs
- SecurityDocument.cs
- TrustManagerPromptUI.cs
- ListSortDescription.cs
- BaseComponentEditor.cs
- LinqDataSourceStatusEventArgs.cs
- MarkupWriter.cs
- RadialGradientBrush.cs
- TextDocumentView.cs
- GorillaCodec.cs
- CodeFieldReferenceExpression.cs
- DBBindings.cs
- MultiTargetingUtil.cs
- DiscoveryClientDuplexChannel.cs
- SecurityProtocolFactory.cs
- TypeHelper.cs
- UserInitiatedNavigationPermission.cs
- System.Data.OracleClient_BID.cs
- EncodingInfo.cs
- DataGridViewImageColumn.cs
- PointCollectionValueSerializer.cs
- ImportedPolicyConversionContext.cs
- HtmlShim.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- XmlDocumentType.cs
- TdsParserSafeHandles.cs
- WebPartZone.cs
- SerializationObjectManager.cs
- ErrorHandler.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- DataGridHeaderBorder.cs
- UiaCoreProviderApi.cs
- TcpClientChannel.cs
- SrgsSubset.cs
- PipelineDeploymentState.cs
- SqlReferenceCollection.cs
- Empty.cs
- WhitespaceSignificantCollectionAttribute.cs
- CSharpCodeProvider.cs
- EventLogPermissionEntry.cs
- SqlClientMetaDataCollectionNames.cs
- QilPatternVisitor.cs
- FactoryRecord.cs
- AssemblyName.cs
- BoundsDrawingContextWalker.cs
- HtmlTextViewAdapter.cs
- FontStretchConverter.cs
- DataColumnMappingCollection.cs
- WebPartMenuStyle.cs
- MediaElement.cs
- WebSysDisplayNameAttribute.cs
- IPAddressCollection.cs
- Permission.cs
- SystemPens.cs
- UpdateCompiler.cs
- PointAnimationUsingPath.cs
- EnumType.cs
- FtpWebRequest.cs
- ScrollProperties.cs
- DiffuseMaterial.cs
- CFStream.cs
- DefaultWorkflowLoaderService.cs
- MarkupWriter.cs
- SendingRequestEventArgs.cs
- DataSysAttribute.cs
- TabPanel.cs
- IHttpResponseInternal.cs
- WebPartConnectionsConnectVerb.cs
- ClientTargetCollection.cs
- XPathException.cs
- BitmapEffectGroup.cs
- TrueReadOnlyCollection.cs
- EntityDataSourceDataSelection.cs
- LabelExpression.cs
- Size3DConverter.cs
- FilterableAttribute.cs
- XmlSerializationGeneratedCode.cs
- ExpandButtonVisibilityConverter.cs
- UnsignedPublishLicense.cs
- XPathDescendantIterator.cs
- AccessedThroughPropertyAttribute.cs
- DocumentViewer.cs
- VerificationException.cs
- RecordBuilder.cs
- ExtensionWindowHeader.cs
- ContainerParaClient.cs
- sqlser.cs
- Table.cs
- LoginUtil.cs
- BitmapSource.cs
- WriteFileContext.cs
- SmiEventSink_Default.cs