Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OverrideMode.cs
- KeyValueConfigurationElement.cs
- FileIOPermission.cs
- FlagPanel.cs
- IndicCharClassifier.cs
- ADMembershipProvider.cs
- BaseCAMarshaler.cs
- UrlMapping.cs
- RemoteWebConfigurationHostServer.cs
- ComPlusTraceRecord.cs
- ApplicationCommands.cs
- Menu.cs
- PrimaryKeyTypeConverter.cs
- ServicePointManagerElement.cs
- DataBoundControlActionList.cs
- ScriptServiceAttribute.cs
- ResourceReferenceKeyNotFoundException.cs
- CustomLineCap.cs
- DependentTransaction.cs
- ErrorRuntimeConfig.cs
- XmlAutoDetectWriter.cs
- DataGridCellAutomationPeer.cs
- OutputCacheProfileCollection.cs
- recordstatescratchpad.cs
- MimeMultiPart.cs
- WebPartDisplayMode.cs
- XhtmlBasicPageAdapter.cs
- Figure.cs
- Style.cs
- ComAwareEventInfo.cs
- DomNameTable.cs
- BoolExpr.cs
- DataPagerFieldCommandEventArgs.cs
- XmlSchemaValidationException.cs
- ByteStreamGeometryContext.cs
- PropertyValue.cs
- InvalidOleVariantTypeException.cs
- SessionSwitchEventArgs.cs
- ComboBox.cs
- SqlProvider.cs
- Zone.cs
- ButtonColumn.cs
- NullRuntimeConfig.cs
- WebPartsSection.cs
- VectorValueSerializer.cs
- EventMap.cs
- DocumentPageHost.cs
- ScriptBehaviorDescriptor.cs
- _AuthenticationState.cs
- ObjectContextServiceProvider.cs
- BadImageFormatException.cs
- SqlDataSourceFilteringEventArgs.cs
- DmlSqlGenerator.cs
- CompareInfo.cs
- MethodRental.cs
- CompositeScriptReference.cs
- WindowsTreeView.cs
- TargetControlTypeCache.cs
- SystemUdpStatistics.cs
- ButtonBaseAutomationPeer.cs
- XhtmlTextWriter.cs
- DataGridTableStyleMappingNameEditor.cs
- DiscoveryDocumentReference.cs
- FixUp.cs
- ConfigurationValidatorAttribute.cs
- Rect3DConverter.cs
- Annotation.cs
- DataGridAddNewRow.cs
- WaitForChangedResult.cs
- SafeNativeMethodsOther.cs
- KeyValueInternalCollection.cs
- CorrelationValidator.cs
- HashAlgorithm.cs
- TcpChannelListener.cs
- MemberDomainMap.cs
- ManagementObjectCollection.cs
- ReversePositionQuery.cs
- CodeVariableReferenceExpression.cs
- XhtmlTextWriter.cs
- SrgsDocumentParser.cs
- BigInt.cs
- CodeCompiler.cs
- DateTime.cs
- CompoundFileDeflateTransform.cs
- SecurityTokenParameters.cs
- ALinqExpressionVisitor.cs
- InputElement.cs
- ComplexTypeEmitter.cs
- VirtualizingStackPanel.cs
- DataSet.cs
- VectorCollectionConverter.cs
- validation.cs
- StorageAssociationSetMapping.cs
- Inflater.cs
- IconConverter.cs
- AssociationSet.cs
- DataObjectAttribute.cs
- HostingEnvironmentSection.cs
- SqlDataSourceCache.cs
- WebPartEditorOkVerb.cs