Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- IBuiltInEvidence.cs
- LocatorBase.cs
- TextRenderer.cs
- AssemblyName.cs
- BamlStream.cs
- HtmlElementCollection.cs
- GlyphRunDrawing.cs
- ObjectCloneHelper.cs
- GridViewCancelEditEventArgs.cs
- SafeRightsManagementSessionHandle.cs
- SearchForVirtualItemEventArgs.cs
- HwndKeyboardInputProvider.cs
- SimpleApplicationHost.cs
- BitmapCodecInfoInternal.cs
- SynchronizationLockException.cs
- XPathNodeInfoAtom.cs
- RegexCaptureCollection.cs
- StringStorage.cs
- HtmlInputControl.cs
- InheritanceAttribute.cs
- QueryParameter.cs
- BrushValueSerializer.cs
- SendMessageContent.cs
- EventListenerClientSide.cs
- PeerValidationBehavior.cs
- Assembly.cs
- NullableFloatMinMaxAggregationOperator.cs
- SchemaTypeEmitter.cs
- HMACMD5.cs
- RuntimeArgumentHandle.cs
- XmlLinkedNode.cs
- SizeIndependentAnimationStorage.cs
- Compiler.cs
- SuppressMergeCheckAttribute.cs
- ThreadExceptionEvent.cs
- PrePrepareMethodAttribute.cs
- VectorCollectionValueSerializer.cs
- HtmlButton.cs
- BamlCollectionHolder.cs
- OleDbInfoMessageEvent.cs
- Int64AnimationBase.cs
- ZipPackagePart.cs
- XMLSyntaxException.cs
- Point3DConverter.cs
- LassoHelper.cs
- CustomSignedXml.cs
- BitStack.cs
- EndpointAddressMessageFilterTable.cs
- RoutedEventArgs.cs
- BlockUIContainer.cs
- HiddenFieldPageStatePersister.cs
- MetadataArtifactLoaderCompositeFile.cs
- DispatcherHookEventArgs.cs
- DurableEnlistmentState.cs
- ReferencedCollectionType.cs
- SyncOperationState.cs
- InternalConfigSettingsFactory.cs
- TransactionFilter.cs
- TextDecoration.cs
- SecurityElement.cs
- AssemblyCache.cs
- Trace.cs
- Comparer.cs
- TreeNodeClickEventArgs.cs
- ProxyWebPartManager.cs
- ByteAnimationUsingKeyFrames.cs
- MsmqAuthenticationMode.cs
- DelegateInArgument.cs
- IdleTimeoutMonitor.cs
- Tile.cs
- DataException.cs
- RuleSettingsCollection.cs
- TimeoutHelper.cs
- returneventsaver.cs
- MiniLockedBorderGlyph.cs
- SHA1.cs
- _NegoStream.cs
- ZoneIdentityPermission.cs
- DeobfuscatingStream.cs
- VirtualDirectoryMappingCollection.cs
- WindowsHyperlink.cs
- TargetParameterCountException.cs
- DataSourceHelper.cs
- GeneralTransform.cs
- OleDbDataReader.cs
- InterleavedZipPartStream.cs
- FileLogRecordHeader.cs
- MessagePropertyAttribute.cs
- GiveFeedbackEvent.cs
- HighlightVisual.cs
- Suspend.cs
- XPathNodeList.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- CodeDOMProvider.cs
- BamlLocalizabilityResolver.cs
- WebPartActionVerb.cs
- XmlnsCache.cs
- DependentList.cs
- GeometryValueSerializer.cs
- LocationUpdates.cs