Fix symbol cache

This commit is contained in:
2026-02-22 13:36:28 -05:00
parent 7e0c5f22b6
commit 9a7b09ef7c

View File

@@ -36,31 +36,39 @@ namespace PortfolioManager.Cache
symbolCache=new List<string>(); symbolCache=new List<string>();
} }
} }
public void Dispose() public void Dispose()
{ {
lock(thisLock) lock(thisLock)
{ {
if(null==symbolCacheInstance || false==threadRun)return; if(null==symbolCacheInstance || false==threadRun)return;
threadRun=false; threadRun=false;
if(null!=cacheMonitorThread)
{
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("[SymbolCache:Dispose]Thread state is {0}. Joining main thread...",Utility.ThreadStateToString(cacheMonitorThread)));
cacheMonitorThread.Join(5000);
cacheMonitorThread=null;
MDTrace.WriteLine(LogLevel.DEBUG,"[SymbolCache:Dispose] End.");
}
symbolCacheInstance=null; symbolCacheInstance=null;
} }
if(null!=cacheMonitorThread)
{
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("[SymbolCache:Dispose]Thread state is {0}. Joining main thread...",Utility.ThreadStateToString(cacheMonitorThread)));
cacheMonitorThread.Join(5000);
cacheMonitorThread=null;
MDTrace.WriteLine(LogLevel.DEBUG,"[SymbolCache:Dispose] End.");
}
} }
public List<String> GetSymbols() public List<String> GetSymbols()
{ {
lock(this) lock(thisLock)
{ {
if(0==symbolCache.Count)symbolCache=PricingDA.GetSymbols(); if(symbolCache.Count>0)return new List<string>(symbolCache);
return symbolCache; }
List<String> symbols = PricingDA.GetSymbols();
lock(thisLock)
{
if(symbolCache.Count>0)return new List<string>(symbolCache);
symbolCache=new List<String>(symbols);
return new List<string>(symbols);
} }
} }
private void ThreadProc() private void ThreadProc()
{ {
int quantums=0; int quantums=0;
@@ -68,13 +76,15 @@ namespace PortfolioManager.Cache
while(threadRun) while(threadRun)
{ {
Thread.Sleep(quantumInterval); Thread.Sleep(quantumInterval);
if(!threadRun)break;
quantums+=quantumInterval; quantums+=quantumInterval;
if(quantums>cacheRefreshAfter) if(quantums>cacheRefreshAfter)
{ {
quantums=0; quantums=0;
List<String> symbols = PricingDA.GetSymbols();
lock(thisLock) lock(thisLock)
{ {
symbolCache=PricingDA.GetSymbols(); symbolCache=new List<string>(symbols);
} }
} }
} }