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
- ArrayElementGridEntry.cs
- SystemMulticastIPAddressInformation.cs
- ProtocolInformationReader.cs
- PolyQuadraticBezierSegment.cs
- FixedDocumentPaginator.cs
- CodeTypeParameter.cs
- Interlocked.cs
- TableRow.cs
- RectangleConverter.cs
- FieldNameLookup.cs
- BindingExpressionBase.cs
- HttpRuntime.cs
- DesignerView.Commands.cs
- NotifyInputEventArgs.cs
- SqlInternalConnectionTds.cs
- KnownTypesProvider.cs
- UpdateCommand.cs
- ExtendedProtectionPolicyElement.cs
- RowToParametersTransformer.cs
- OdbcConnectionFactory.cs
- SqlAliaser.cs
- TreeBuilderBamlTranslator.cs
- RadioButtonAutomationPeer.cs
- PolicyAssertionCollection.cs
- XmlSchemaSimpleContent.cs
- ExpandableObjectConverter.cs
- SchemaTypeEmitter.cs
- Command.cs
- XmlName.cs
- BufferedWebEventProvider.cs
- SystemIPAddressInformation.cs
- RelatedPropertyManager.cs
- SeekableReadStream.cs
- ManagementScope.cs
- CustomCategoryAttribute.cs
- DataExchangeServiceBinder.cs
- NativeMethods.cs
- OracleConnectionFactory.cs
- XmlQueryContext.cs
- DesignTable.cs
- PackWebRequest.cs
- XmlSortKeyAccumulator.cs
- SessionEndingCancelEventArgs.cs
- FolderBrowserDialog.cs
- ListViewSelectEventArgs.cs
- CompilationUtil.cs
- HttpCachePolicyElement.cs
- DataGridViewCellCancelEventArgs.cs
- OdbcCommandBuilder.cs
- DispatcherEventArgs.cs
- UndoManager.cs
- ClientRolePrincipal.cs
- _NegotiateClient.cs
- AuthenticatedStream.cs
- DSASignatureFormatter.cs
- CategoryGridEntry.cs
- XhtmlBasicSelectionListAdapter.cs
- DatagramAdapter.cs
- GrammarBuilderRuleRef.cs
- StyleSheet.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- DialogWindow.cs
- SignatureToken.cs
- Icon.cs
- TemplateComponentConnector.cs
- DecoderFallback.cs
- Attributes.cs
- SqlInfoMessageEvent.cs
- _NestedMultipleAsyncResult.cs
- AnnotationAdorner.cs
- StaticFileHandler.cs
- RangeValidator.cs
- SchemaElementDecl.cs
- ByteArrayHelperWithString.cs
- Matrix3D.cs
- HttpClientCertificate.cs
- TimeoutConverter.cs
- BindingEditor.xaml.cs
- WindowInteropHelper.cs
- XmlDataImplementation.cs
- securitymgrsite.cs
- StoreContentChangedEventArgs.cs
- CapabilitiesAssignment.cs
- FlowDocumentView.cs
- BaseDataListPage.cs
- DynamicActivityTypeDescriptor.cs
- OleAutBinder.cs
- PointHitTestResult.cs
- OleAutBinder.cs
- TerminateDesigner.cs
- HMAC.cs
- WindowsClaimSet.cs
- HandleCollector.cs
- WebPartDescriptionCollection.cs
- SettingsProviderCollection.cs
- XmlPreloadedResolver.cs
- SafeHandles.cs
- CodeCastExpression.cs
- PathFigure.cs
- ConfigurationManagerHelperFactory.cs