예제 #1
0
        /// <summary>
        /// 获取存在的实例
        /// </summary>
        /// <param name="mLastDateStr"></param>
        /// <param name="dbName"></param>
        /// <param name="maxCount"></param>
        /// <returns></returns>
        private static T getExistsInstance(string mLastDateStr, string dbName, long maxCount)
        {
            T mInstance = new T();

            mInstanceListLock.EnterReadLock();

            try
            {
                string dataKey = YunMapCacheHelper.getInstanceName(mLastDateStr, dbName, maxCount);
                if (mInstanceList.ContainsKey(dataKey))
                {
                    mInstance = mInstanceList[dataKey];
                }
            }
            catch (Exception ex)
            {
                YunLib.LogWriter.Log(ex.ToString());
            }

            mInstanceListLock.ExitReadLock();

            return(mInstance);
        }
예제 #2
0
        /// <summary>
        /// 获取一个新的实例
        /// </summary>
        /// <returns></returns>
        private static T getNewInstance(string mLastDateStr, string dbName, long maxCount)
        {
            T mInstance = new T();

            mInstanceListLock.EnterWriteLock();

            try
            {
                string dataKey = YunMapCacheHelper.getInstanceName(mLastDateStr, dbName, maxCount);

                //可能多个写锁触发,先判断
                if (mInstanceList.ContainsKey(dataKey))
                {
                    mInstance = mInstanceList[dataKey];
                }
                else
                {
                    mInstance.InitCache(dataKey, maxCount);
                    if (mInstance.IsCacheValid())
                    {
                        mInstanceList.Add(dataKey, mInstance);
                    }
                }

                //清理过期数据缓存
                clearOutDateCache(mLastDateStr);
            }
            catch (Exception ex)
            {
                YunLib.LogWriter.Log(ex.ToString());
            }

            mInstanceListLock.ExitWriteLock();

            return(mInstance);
        }