/// <summary> /// 获取Xml节点属性值 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <param name="node">节点</param> /// <param name="name">属性名</param> /// <param name="defaultValue">>默认值。如果没有匹配属性存在</param> /// <returns></returns> public static T GetAttribute <T>(this XmlNode node, string name, T defaultValue = default(T)) { var value = node.GetAttribute(name); if (string.IsNullOrWhiteSpace(value)) { return(defaultValue); } return(ConvHelper.To <T>(value)); }
/// <summary> /// 获取指定键名的值 /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="identity">标识</param> /// <param name="key">键名</param> /// <returns></returns> public static T GetValue <T>(this IIdentity identity, string key) { return(ConvHelper.To <T>(identity.GetValue(key))); }
/// <summary> /// 获取文件大小,单位:G /// </summary> /// <returns></returns> public double GetSizeByG() { return(ConvHelper.ToDouble(Size / 1024.0 / 1024.0 / 1024.0, 2)); }
public static ExpirationHint GetExpirationHintObj(Alachisoft.NCache.Config.Dom.ExpirationPolicy policy, Alachisoft.NCache.Common.Protobuf.Dependency dependency, long absoluteExpiration, long slidingExpiration, bool resyncOnExpiration, string serializationContext) { ConvHelper.ValidateExpiration(policy); ExpirationHint hint = null; const long TICKS = 10000000; if ((absoluteExpiration == 1 || absoluteExpiration == 2) || (slidingExpiration == 1 || slidingExpiration == 2)) { if (policy.SlidingExpiration.LongerEnabled || policy.SlidingExpiration.DefaultEnabled || policy.AbsoluteExpiration.LongerEnabled || policy.AbsoluteExpiration.DefaultEnabled) { #region In case user provides sliding expiration as an enum if (absoluteExpiration == 0) { if (policy.SlidingExpiration.LongerEnabled && slidingExpiration == 2) { hint = new IdleExpiration(new TimeSpan(policy.SlidingExpiration.Longer * TICKS)); } else if (policy.SlidingExpiration.DefaultEnabled && slidingExpiration == 1) { hint = new IdleExpiration(new TimeSpan(policy.SlidingExpiration.Default * TICKS)); } } #endregion #region In case user provides absolute expiration as an enum if (slidingExpiration == 0) { if (policy.AbsoluteExpiration.LongerEnabled && absoluteExpiration == 2)// If not enabled try to check if Longer Expiration is enabled { hint = new FixedExpiration(DateTime.Now.AddSeconds(policy.AbsoluteExpiration.Longer).ToUniversalTime()); } else if (absoluteExpiration == 1 && policy.AbsoluteExpiration.DefaultEnabled)// check if Longer is enabled in config { hint = new FixedExpiration(DateTime.Now.AddSeconds(policy.AbsoluteExpiration.Default).ToUniversalTime()); } } #endregion } else { absoluteExpiration = 0;// If user provides custom expiration but it is NOT enabled then item will stay in cache, forever. } } //We expect Web.Cache to send in UTC DateTime, AbsoluteExpiration is dealt in UTC if (absoluteExpiration != 0 && absoluteExpiration != 1 && absoluteExpiration != 2 && absoluteExpiration != DateTime.MaxValue.ToUniversalTime().Ticks) { hint = new FixedExpiration(new DateTime(absoluteExpiration, DateTimeKind.Utc)); } if (slidingExpiration != 0 && slidingExpiration != 1 && slidingExpiration != 2) { hint = new IdleExpiration(new TimeSpan(slidingExpiration)); } ExpirationHint depHint = GetExpirationHintObj(dependency, false, serializationContext); if (depHint != null) { if (hint != null) { if (depHint is AggregateExpirationHint) { ((AggregateExpirationHint)depHint).Add(hint); hint = depHint; } else { hint = new AggregateExpirationHint(hint, depHint); } } else { hint = depHint; } } if (hint != null && resyncOnExpiration) { hint.SetBit(ExpirationHint.NEEDS_RESYNC); } return(hint); }
public void Synchronize(SyncItem syncItem, DependencyStatus status) { long size = 0; if (SetItemStatus(syncItem, status)) { switch (status) { case DependencyStatus.Expired: RemoveSyncItem(syncItem, true); break; case DependencyStatus.HasChanged: if (_cache != null) { ulong version = 0; BitSet flag = new BitSet(); //Flag information should be add while synchronizing the entry. DateTime absoluteExpiration = DateTime.MaxValue.ToUniversalTime(); TimeSpan slidingExpiration = TimeSpan.Zero; // cache item could be fetched from client cache now. string group = null; string subgroup = null; Hashtable queryInfo = null; object updateItem = GetItemFromSyncCache(syncItem, ref version, ref flag, ref absoluteExpiration, ref slidingExpiration, ref size, ref group, ref subgroup, ref queryInfo); if (updateItem != null) { ClusteredArrayList dependentKeys = _dependenciesKeyMap[syncItem] as ClusteredArrayList; try { ExpirationHint expiration = null; if (!DateTime.MaxValue.ToUniversalTime().Equals(absoluteExpiration)) { expiration = ConvHelper.MakeExpirationHint(_context.CacheRoot.Configuration.ExpirationPolicy, absoluteExpiration.Ticks, true); } else if (!TimeSpan.Zero.Equals(slidingExpiration)) { expiration = ConvHelper.MakeExpirationHint(_context.CacheRoot.Configuration.ExpirationPolicy, slidingExpiration.Ticks, false); } if (dependentKeys != null) { foreach (object key in dependentKeys) { //TODO :Need to add expiration with time OperationContext context = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation); context.Add(OperationContextFieldName.ValueDataSize, size); BitSet flagMap = new BitSet(); updateItem = _context.CachingSubSystemDataService.GetClientData(updateItem, ref flagMap, Common.Util.LanguageContext.DOTNET); _cache.Insert(key, updateItem, expiration, null, null, null, null, null, flag, null, version, LockAccessType.PRESERVE_VERSION, null, null, context); } } SetItemStatus(syncItem, DependencyStatus.Unchanged); } catch (Exception exception) { RemoveSyncItem(syncItem, true); } } } break; } } }
/// <summary> /// 获取枚举值 /// </summary> /// <typeparam name="TResult">返回值类型</typeparam> /// <param name="instance">枚举实例</param> /// <returns></returns> public static TResult Value <TResult>(this System.Enum instance) { return(ConvHelper.To <TResult>(Value(instance))); }
public static void AsRef <T>(this TypedReference tr, Reference.RefAction <T> act) { ConvHelper <T> .Convert(tr, act); }