Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- controlskin.cs
- FrameworkPropertyMetadata.cs
- CompareInfo.cs
- ColorConvertedBitmap.cs
- GrammarBuilderDictation.cs
- DocumentSequence.cs
- PackageDigitalSignature.cs
- CompilerScopeManager.cs
- WebEventCodes.cs
- DataException.cs
- ComboBox.cs
- DynamicDocumentPaginator.cs
- Path.cs
- Dump.cs
- Timeline.cs
- UserControl.cs
- HashMembershipCondition.cs
- RadioButtonFlatAdapter.cs
- AdornerDecorator.cs
- MenuItemAutomationPeer.cs
- AnimationTimeline.cs
- InheritedPropertyChangedEventArgs.cs
- _NegoState.cs
- DocumentReferenceCollection.cs
- XmlObjectSerializerReadContext.cs
- DetailsViewModeEventArgs.cs
- CodeConditionStatement.cs
- BidirectionalDictionary.cs
- CodeVariableReferenceExpression.cs
- AdornerDecorator.cs
- ResXResourceWriter.cs
- TerminateSequenceResponse.cs
- Transactions.cs
- FigureParaClient.cs
- PasswordDeriveBytes.cs
- ToolBarPanel.cs
- RemoteHelper.cs
- CryptoApi.cs
- ThemeDictionaryExtension.cs
- MembershipUser.cs
- TextTreeTextBlock.cs
- MruCache.cs
- SystemIPInterfaceProperties.cs
- FormClosingEvent.cs
- RepeaterItem.cs
- StrokeIntersection.cs
- _LocalDataStoreMgr.cs
- FixedSOMSemanticBox.cs
- EntityDataSourceWrapperCollection.cs
- Automation.cs
- SplitContainer.cs
- RuntimeEnvironment.cs
- StoreItemCollection.cs
- AutomationPropertyInfo.cs
- SizeF.cs
- ExpandCollapsePattern.cs
- AuthenticationModuleElement.cs
- ScriptControlDescriptor.cs
- ConfigurationConverterBase.cs
- Int32.cs
- BufferBuilder.cs
- TokenBasedSet.cs
- CacheModeConverter.cs
- CodeDirectionExpression.cs
- OleServicesContext.cs
- BooleanAnimationUsingKeyFrames.cs
- ObfuscationAttribute.cs
- Bitmap.cs
- DataListItemEventArgs.cs
- TextOutput.cs
- SessionParameter.cs
- SqlDataSourceStatusEventArgs.cs
- ParallelSeparator.xaml.cs
- Emitter.cs
- MarshalDirectiveException.cs
- SchemaSetCompiler.cs
- ImageConverter.cs
- PropertyConverter.cs
- SqlBulkCopyColumnMappingCollection.cs
- EventToken.cs
- ScrollEvent.cs
- PermissionListSet.cs
- SqlConnectionHelper.cs
- AsyncPostBackTrigger.cs
- isolationinterop.cs
- PointKeyFrameCollection.cs
- ClonableStack.cs
- WebPartExportVerb.cs
- ContentPlaceHolderDesigner.cs
- NavigationProgressEventArgs.cs
- UniqueConstraint.cs
- SymbolEqualComparer.cs
- CryptoApi.cs
- RangeValidator.cs
- FaultException.cs
- HelpInfo.cs
- AutomationPropertyInfo.cs
- Matrix.cs
- _Rfc2616CacheValidators.cs
- MDIWindowDialog.cs