Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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. // //----------------------------------------------------------------------------- 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BooleanToVisibilityConverter.cs
- RuntimeTrackingProfile.cs
- XmlDataProvider.cs
- AppDomainFactory.cs
- MyContact.cs
- DrawingContextWalker.cs
- DynamicMethod.cs
- FillRuleValidation.cs
- ProjectionCamera.cs
- PrefixHandle.cs
- AddInBase.cs
- ImageInfo.cs
- MaskedTextBoxTextEditor.cs
- DecoderExceptionFallback.cs
- DeleteStoreRequest.cs
- ForceCopyBuildProvider.cs
- DataGridCellEditEndingEventArgs.cs
- DeviceContext.cs
- Win32PrintDialog.cs
- ResourceDictionaryCollection.cs
- Identifier.cs
- EntityConnection.cs
- XamlToRtfWriter.cs
- Dictionary.cs
- Rotation3DAnimation.cs
- mda.cs
- MemberInfoSerializationHolder.cs
- BasicExpandProvider.cs
- Profiler.cs
- QueryRewriter.cs
- DesignerMetadata.cs
- Operator.cs
- ActivityAction.cs
- MetadataItem_Static.cs
- DependencyPropertyDescriptor.cs
- CodeGenerator.cs
- BaseTemplateBuildProvider.cs
- CompensatableTransactionScopeActivityDesigner.cs
- PackagePart.cs
- DataGridState.cs
- LinqDataSourceUpdateEventArgs.cs
- FontFamilyConverter.cs
- ProfileEventArgs.cs
- DataGridTableCollection.cs
- Int64Storage.cs
- Attributes.cs
- SchemaManager.cs
- Random.cs
- SecurityDescriptor.cs
- TagPrefixAttribute.cs
- GridViewRowEventArgs.cs
- X509ServiceCertificateAuthentication.cs
- SequenceRange.cs
- OneOf.cs
- SmiMetaData.cs
- IRCollection.cs
- HtmlTextArea.cs
- XmlQueryTypeFactory.cs
- SqlSupersetValidator.cs
- OperatingSystem.cs
- CultureSpecificCharacterBufferRange.cs
- OracleParameter.cs
- SafeSecurityHelper.cs
- UnsafeCollabNativeMethods.cs
- PassportAuthentication.cs
- _ListenerAsyncResult.cs
- TextEditorLists.cs
- SkipQueryOptionExpression.cs
- WorkflowQueue.cs
- SortedList.cs
- XmlJsonReader.cs
- SqlBuffer.cs
- ConvertBinder.cs
- AssemblyCache.cs
- AssemblyLoader.cs
- XslCompiledTransform.cs
- MethodCallExpression.cs
- ProvidePropertyAttribute.cs
- EventRouteFactory.cs
- RequestTimeoutManager.cs
- TargetPerspective.cs
- SrgsSubset.cs
- WebPartConnectVerb.cs
- RequestSecurityTokenForRemoteTokenFactory.cs
- NonSerializedAttribute.cs
- TraceLog.cs
- Peer.cs
- DetailsViewUpdateEventArgs.cs
- SpellerError.cs
- CodeTypeDelegate.cs
- Number.cs
- RichTextBox.cs
- IERequestCache.cs
- SourceElementsCollection.cs
- CodeSubDirectoriesCollection.cs
- BaseTemplateBuildProvider.cs
- Process.cs
- TabletCollection.cs
- DataGridViewCellMouseEventArgs.cs
- SemaphoreFullException.cs