Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / Compilation / TimeStampChecker.cs / 1 / TimeStampChecker.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Compilation { using System; using System.Collections; using System.IO; using System.Web; using System.Web.Hosting; using Debug = System.Web.Util.Debug; internal class TimeStampChecker { internal const String CallContextSlotName = "TSC"; private Hashtable _timeStamps = new Hashtable(StringComparer.OrdinalIgnoreCase); private static TimeStampChecker Current { get { TimeStampChecker tsc = (TimeStampChecker)System.Runtime.Remoting.Messaging.CallContext.GetData( CallContextSlotName) as TimeStampChecker; // Create it on demand if (tsc == null) { tsc = new TimeStampChecker(); Debug.Trace("TimeStampChecker", "Creating new TimeStampChecker"); System.Runtime.Remoting.Messaging.CallContext.SetData(CallContextSlotName, tsc); } return tsc; } } internal static void AddFile(string virtualPath, string path) { Current.AddFileInternal(virtualPath, path); } private void AddFileInternal(string virtualPath, string path) { DateTime lastWriteTimeUtc = File.GetLastWriteTimeUtc(path); if (_timeStamps.Contains(virtualPath)) { DateTime storedValue = (DateTime)_timeStamps[virtualPath]; // Already found to have changed before if (storedValue == DateTime.MaxValue) { Debug.Trace("TimeStampChecker", "AddFileInternal: Same time stamp (" + path + ")"); return; } // If it's different, set it to MaxValue as marker of being invalid if (storedValue != lastWriteTimeUtc) { _timeStamps[virtualPath] = DateTime.MaxValue; Debug.Trace("TimeStampChecker", "AddFileInternal: Changed time stamp (" + path + ")"); } } else { // New path: just add it _timeStamps[virtualPath] = lastWriteTimeUtc; Debug.Trace("TimeStampChecker", "AddFileInternal: New path (" + path + ")"); } } internal static bool CheckFilesStillValid(string key, ICollection virtualPaths) { if (virtualPaths == null) return true; return Current.CheckFilesStillValidInternal(key, virtualPaths); } private bool CheckFilesStillValidInternal(string key, ICollection virtualPaths) { Debug.Trace("TimeStampChecker", "CheckFilesStillValidInternal (" + key + ")"); foreach (string virtualPath in virtualPaths) { if (!_timeStamps.Contains(virtualPath)) continue; string path = HostingEnvironment.MapPath(virtualPath); DateTime lastWriteTimeUtc = File.GetLastWriteTimeUtc(path); DateTime storedValue = (DateTime)_timeStamps[virtualPath]; // If it changed, then it's not valid if (lastWriteTimeUtc != storedValue) { Debug.Trace("TimeStampChecker", "CheckFilesStillValidInternal: File (" + path + ") has changed!"); return false; } } Debug.Trace("TimeStampChecker", "CheckFilesStillValidInternal (" + key + ") is still valid"); return true; } } } // 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.Compilation { using System; using System.Collections; using System.IO; using System.Web; using System.Web.Hosting; using Debug = System.Web.Util.Debug; internal class TimeStampChecker { internal const String CallContextSlotName = "TSC"; private Hashtable _timeStamps = new Hashtable(StringComparer.OrdinalIgnoreCase); private static TimeStampChecker Current { get { TimeStampChecker tsc = (TimeStampChecker)System.Runtime.Remoting.Messaging.CallContext.GetData( CallContextSlotName) as TimeStampChecker; // Create it on demand if (tsc == null) { tsc = new TimeStampChecker(); Debug.Trace("TimeStampChecker", "Creating new TimeStampChecker"); System.Runtime.Remoting.Messaging.CallContext.SetData(CallContextSlotName, tsc); } return tsc; } } internal static void AddFile(string virtualPath, string path) { Current.AddFileInternal(virtualPath, path); } private void AddFileInternal(string virtualPath, string path) { DateTime lastWriteTimeUtc = File.GetLastWriteTimeUtc(path); if (_timeStamps.Contains(virtualPath)) { DateTime storedValue = (DateTime)_timeStamps[virtualPath]; // Already found to have changed before if (storedValue == DateTime.MaxValue) { Debug.Trace("TimeStampChecker", "AddFileInternal: Same time stamp (" + path + ")"); return; } // If it's different, set it to MaxValue as marker of being invalid if (storedValue != lastWriteTimeUtc) { _timeStamps[virtualPath] = DateTime.MaxValue; Debug.Trace("TimeStampChecker", "AddFileInternal: Changed time stamp (" + path + ")"); } } else { // New path: just add it _timeStamps[virtualPath] = lastWriteTimeUtc; Debug.Trace("TimeStampChecker", "AddFileInternal: New path (" + path + ")"); } } internal static bool CheckFilesStillValid(string key, ICollection virtualPaths) { if (virtualPaths == null) return true; return Current.CheckFilesStillValidInternal(key, virtualPaths); } private bool CheckFilesStillValidInternal(string key, ICollection virtualPaths) { Debug.Trace("TimeStampChecker", "CheckFilesStillValidInternal (" + key + ")"); foreach (string virtualPath in virtualPaths) { if (!_timeStamps.Contains(virtualPath)) continue; string path = HostingEnvironment.MapPath(virtualPath); DateTime lastWriteTimeUtc = File.GetLastWriteTimeUtc(path); DateTime storedValue = (DateTime)_timeStamps[virtualPath]; // If it changed, then it's not valid if (lastWriteTimeUtc != storedValue) { Debug.Trace("TimeStampChecker", "CheckFilesStillValidInternal: File (" + path + ") has changed!"); return false; } } Debug.Trace("TimeStampChecker", "CheckFilesStillValidInternal (" + key + ") is still valid"); return true; } } } // 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
- NameValuePair.cs
- ReflectTypeDescriptionProvider.cs
- ImageAutomationPeer.cs
- ToolStripComboBox.cs
- RightsManagementEncryptionTransform.cs
- XmlNamespaceDeclarationsAttribute.cs
- OdbcConnectionString.cs
- DataIdProcessor.cs
- AnimatedTypeHelpers.cs
- ExpressionBuilderCollection.cs
- RadioButtonPopupAdapter.cs
- NumberFormatInfo.cs
- InternalBufferOverflowException.cs
- SlotInfo.cs
- SystemIcons.cs
- CssStyleCollection.cs
- XmlAtomicValue.cs
- PanelDesigner.cs
- QuaternionKeyFrameCollection.cs
- DockPattern.cs
- DispatcherHooks.cs
- SubordinateTransaction.cs
- XmlSiteMapProvider.cs
- EventsTab.cs
- InboundActivityHelper.cs
- DecoratedNameAttribute.cs
- _SecureChannel.cs
- ClientSettingsStore.cs
- ScrollProperties.cs
- AttributeEmitter.cs
- CombinedGeometry.cs
- VersionPair.cs
- _LoggingObject.cs
- CrossAppDomainChannel.cs
- RawStylusInputCustomDataList.cs
- RuleInfoComparer.cs
- DuplicateWaitObjectException.cs
- MgmtResManager.cs
- PageFunction.cs
- Zone.cs
- TransportChannelFactory.cs
- DbQueryCommandTree.cs
- EntitySqlQueryCacheEntry.cs
- ComplexType.cs
- X509PeerCertificateAuthentication.cs
- TimeSpan.cs
- TextTreeFixupNode.cs
- _NegotiateClient.cs
- OleDbWrapper.cs
- FixedFindEngine.cs
- IdleTimeoutMonitor.cs
- FileDialogCustomPlace.cs
- CngProperty.cs
- SqlReorderer.cs
- ProviderCommandInfoUtils.cs
- FontWeight.cs
- Encoding.cs
- RSAOAEPKeyExchangeDeformatter.cs
- ReverseQueryOperator.cs
- GreenMethods.cs
- TrackBarRenderer.cs
- TextTreeObjectNode.cs
- ObjectSecurity.cs
- SecurityTokenProviderContainer.cs
- InternalEnumValidatorAttribute.cs
- EventManager.cs
- metadatamappinghashervisitor.cs
- RelAssertionDirectKeyIdentifierClause.cs
- ResourceAssociationSet.cs
- SQLBytes.cs
- BinaryWriter.cs
- Base64Stream.cs
- Point3DCollectionConverter.cs
- GridViewUpdatedEventArgs.cs
- ObjectRef.cs
- CurrentChangingEventManager.cs
- XMLSyntaxException.cs
- ActiveXSite.cs
- RelationshipEndMember.cs
- DispatcherProcessingDisabled.cs
- MsmqProcessProtocolHandler.cs
- LoginCancelEventArgs.cs
- DataContractSerializer.cs
- CmsInterop.cs
- SelectionChangedEventArgs.cs
- HwndStylusInputProvider.cs
- AsynchronousChannelMergeEnumerator.cs
- DataRowCollection.cs
- Transform3D.cs
- Vertex.cs
- MimeMapping.cs
- CheckPair.cs
- SynchronizationScope.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- CommandHelpers.cs
- DispatcherFrame.cs
- ModuleConfigurationInfo.cs
- RuntimeHelpers.cs
- AssemblyUtil.cs
- ByteAnimationUsingKeyFrames.cs