Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Activation / ServiceMemoryGates.cs / 1 / ServiceMemoryGates.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Collections.Generic; using System.ServiceModel.Channels; using System.Runtime.InteropServices; using System.ComponentModel; using System.Threading; using System.Runtime.CompilerServices; using System.Security; static class ServiceMemoryGates { ////// Critical - uses SecurityCritical helper methods to check memory status /// - allocates unmanaged resources, can only be called with admin-specified value /// [SecurityCritical] internal static void Check(int minFreeMemoryPercentage) { // Boundary check percentage, if out of bounds Gate is turned off. // 0 is defined as disabled. Configuration defines 99 as max allowed so we disable // if we receive something out of range if (minFreeMemoryPercentage < 1 || minFreeMemoryPercentage > 99) { return; } UnsafeNativeMethods.MEMORYSTATUSEX memoryStatus = new UnsafeNativeMethods.MEMORYSTATUSEX(); GetGlobalMemoryStatus(ref memoryStatus); ulong threshold = memoryStatus.ullTotalPageFile / 100 * (ulong)minFreeMemoryPercentage; if (memoryStatus.ullAvailPageFile < threshold) { // Yield this thread -- this will also ensure that we have a full time slice when we // do our alloc/free Thread.Sleep(0); // Commit 1.5 times of the threshold. This should force the page file to grow, if // possible. (GlobalMemoryStatusEx only returns information about the current pagefile, // not about the maximum pagefile.) uint sizeToAlloc = 0; if (threshold < (ulong)int.MaxValue) { sizeToAlloc = (uint)threshold / 2 * 3; } if (sizeToAlloc > 0) { ForcePageFileToGrow(sizeToAlloc); GetGlobalMemoryStatus(ref memoryStatus); threshold = memoryStatus.ullTotalPageFile / 100 * (ulong)minFreeMemoryPercentage; } if (memoryStatus.ullAvailPageFile < threshold) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InsufficientMemoryException( SR.GetString(SR.Hosting_MemoryGatesCheckFailed, memoryStatus.ullAvailPageFile, minFreeMemoryPercentage))); } } } ////// Critical - Uses UnsafeNativeMethods, caller must guard parameter /// [SecurityCritical] static void ForcePageFileToGrow(uint sizeToAlloc) { RuntimeHelpers.PrepareConstrainedRegions(); try {} finally { // We don't care if this actually succeeds or not, we are just trying to grow the page // file. #pragma warning suppress 56523 // [....], we don't care whether this actually succeeds IntPtr ptr = UnsafeNativeMethods.VirtualAlloc(IntPtr.Zero, (UIntPtr)sizeToAlloc, UnsafeNativeMethods.MEM_COMMIT, (uint)UnsafeNativeMethods.PAGE_READWRITE); if (ptr != IntPtr.Zero) { #pragma warning suppress 56523 // [....], we don't care whether this actually succeeds UnsafeNativeMethods.VirtualFree(ptr, (UIntPtr)sizeToAlloc, UnsafeNativeMethods.MEM_DECOMMIT); } } } ////// Critical - Uses UnsafeNativeMethods to fetch memory status structure, caller must not leak it /// [SecurityCritical] static void GetGlobalMemoryStatus(ref UnsafeNativeMethods.MEMORYSTATUSEX memoryStatus) { memoryStatus.dwLength = (uint)Marshal.SizeOf(typeof(UnsafeNativeMethods.MEMORYSTATUSEX)); if (!UnsafeNativeMethods.GlobalMemoryStatusEx(ref memoryStatus)) { int error = Marshal.GetLastWin32Error(); // Treat as the worst case. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new InvalidOperationException(SR.GetString(SR.Hosting_GetGlobalMemoryFailed), new Win32Exception(error))); } } } } // 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
- InvalidProgramException.cs
- GifBitmapEncoder.cs
- MouseActionConverter.cs
- SqlXmlStorage.cs
- DBSchemaTable.cs
- DataGridView.cs
- HyperLinkField.cs
- Documentation.cs
- HtmlElementErrorEventArgs.cs
- SByteStorage.cs
- Stack.cs
- ElementFactory.cs
- LateBoundChannelParameterCollection.cs
- RuleInfoComparer.cs
- TimeSpanOrInfiniteValidator.cs
- AjaxFrameworkAssemblyAttribute.cs
- OutputWindow.cs
- EmbossBitmapEffect.cs
- FileEnumerator.cs
- TrackingWorkflowEventArgs.cs
- elementinformation.cs
- XmlSchemaImporter.cs
- CollectionBase.cs
- LinqToSqlWrapper.cs
- ParserStreamGeometryContext.cs
- safesecurityhelperavalon.cs
- CompilerGeneratedAttribute.cs
- panel.cs
- linebase.cs
- HtmlValidationSummaryAdapter.cs
- Formatter.cs
- QilLoop.cs
- FormViewRow.cs
- BitmapEffectGeneralTransform.cs
- TextServicesProperty.cs
- PolicyChain.cs
- DependencyObjectPropertyDescriptor.cs
- ExceptionValidationRule.cs
- StyleXamlParser.cs
- InternalConfigSettingsFactory.cs
- KeyValueSerializer.cs
- SubMenuStyleCollection.cs
- HttpGetProtocolReflector.cs
- LoginView.cs
- BamlTreeMap.cs
- FormsIdentity.cs
- MediaScriptCommandRoutedEventArgs.cs
- RegexCaptureCollection.cs
- ComponentResourceManager.cs
- LoginUtil.cs
- DateTimeFormatInfo.cs
- CustomErrorCollection.cs
- WebPartCatalogCloseVerb.cs
- ProviderConnectionPoint.cs
- XmlDataProvider.cs
- SingleBodyParameterMessageFormatter.cs
- UrlPropertyAttribute.cs
- ConfigurationValue.cs
- DocumentAutomationPeer.cs
- CodeNamespaceImportCollection.cs
- DefaultHttpHandler.cs
- RegexCharClass.cs
- Selection.cs
- ValuePatternIdentifiers.cs
- BadImageFormatException.cs
- WebPartConnectionsCloseVerb.cs
- AsyncOperation.cs
- GeometryModel3D.cs
- ListBase.cs
- AxisAngleRotation3D.cs
- TextEditorParagraphs.cs
- DataContract.cs
- ObjectDataSourceDisposingEventArgs.cs
- HeaderedItemsControl.cs
- ProfileService.cs
- LocatorGroup.cs
- WebEventTraceProvider.cs
- AssertFilter.cs
- ZipIOLocalFileDataDescriptor.cs
- MutexSecurity.cs
- FilterEventArgs.cs
- NumericUpDownAcceleration.cs
- CollectionEditorDialog.cs
- DataMisalignedException.cs
- ActivityMarkupSerializer.cs
- COM2PictureConverter.cs
- NamespaceList.cs
- ProcessHostMapPath.cs
- XslTransform.cs
- RectAnimation.cs
- CardSpaceShim.cs
- RSAOAEPKeyExchangeFormatter.cs
- EditBehavior.cs
- SelectedGridItemChangedEvent.cs
- XmlDataSourceView.cs
- BitmapScalingModeValidation.cs
- SafeFileMappingHandle.cs
- ListBox.cs
- Parser.cs
- CachedPathData.cs