public ElementDailyDataRange SelectDailyData(String ticker, DateTime dateFrom, DateTime dateTo) { ElementDailyDataRange tempRes = SelectDailyData(ticker); DailyDataWrapper[] tempArr = (from ddw in tempRes.DailyData where ddw.Day >= dateFrom && ddw.Day <= dateTo select ddw).ToArray <DailyDataWrapper>(); ElementDailyDataRange result; if (tempArr.Length > 0) { result = new ElementDailyDataRange(ticker, tempArr, tempArr[0].Day, tempArr[tempArr.Length - 1].Day); if (LoggerFactory.AppLogger.IsTraceEnabled) { LoggerFactory.AppLogger.Trace("[DataProviderProxy.SelectDailyData] Loaded records for " + ticker + " " + tempArr.Length + " " + result.DateFrom + " " + result.DateTo); } } else { LoggerFactory.AppLogger.Warn("[DataProviderProxy.SelectDailyData] No data for period for " + ticker + " " + dateFrom + " " + dateTo); result = new ElementDailyDataRange(ticker, EmptyArrayTemplate <DailyDataWrapper> .Instance, DateTime.MaxValue, DateTime.MaxValue); } return(result); }
public ElementDailyDataRange SelectDailyData(String ticker) { String cacheItemKey = String.Format("[SelectDailyData][{0}]", ticker); selectDailyDataLock.AcquireReaderLock(dataProviderLockTimeout); ElementDailyDataRange result = null; try { result = (ElementDailyDataRange)DataCache.Instance.Get(cacheItemKey); if (null == result) { ////////////////////////////////////////////////////////////////// /// no data in cache - need to load it, but first check it again /// LockCookie lockCookie = selectDailyDataLock.UpgradeToWriterLock(dataProviderLockTimeout); try { result = (ElementDailyDataRange)DataCache.Instance.Get(cacheItemKey); if (null == result) { DailyData[] tempRes = (new ItemsDataProvider()).LoadItemDailyData(ticker); if (tempRes.Length > 0) { result = new ElementDailyDataRange(ticker, WrapperUtilities.Convert(tempRes), tempRes[0].Day, tempRes[tempRes.Length - 1].Day); if (LoggerFactory.AppLogger.IsTraceEnabled) { LoggerFactory.AppLogger.Trace("[DataProviderProxy.SelectDailyData] Loaded records for " + ticker + " " + tempRes.Length + " " + result.DateFrom + " " + result.DateTo); } DataCache.Instance.Add(cacheItemKey, result); } else { LoggerFactory.AppLogger.Warn("[DataProviderProxy.SelectDailyData] No data for " + ticker); result = new ElementDailyDataRange(ticker, EmptyArrayTemplate <DailyDataWrapper> .Instance, DateTime.MaxValue, DateTime.MaxValue); ////////////////////////////////////////////////////// /// do not add empty item to cache /// } } } finally { selectDailyDataLock.DowngradeFromWriterLock(ref lockCookie); } } } finally { selectDailyDataLock.ReleaseReaderLock(); } return(result); }