public void Delete(IBar bar) { IList <IBar> data = ticks; _lock.AcquireWriterLock(1000); try { int index; if (BarExists(bar, out index)) { data.RemoveAt(index); if (changeFrom > index) { changeFrom = index; } --Count; TicksFileSaver.Add4Save(this, data); } } finally { _lock.ReleaseWriterLock(); } }
public void Add(IBar bar) { IList <IBar> data = ticks; // пытаюсь получить блокировку в течении 10 минут, скидывая Warn и Error если это дело затягивается int count = 0; bool exceptionFlag = true; while ((exceptionFlag) && (count < (10 * 60))) { exceptionFlag = false; try { _lock.AcquireWriterLock(1000); } catch (ApplicationException) { exceptionFlag = true; ++count; if (count > 10) { if (count > 60) { l.Error("Не могу получить блокировку для записи тика в течении " + count + " сек"); } else { l.Warn("Не могу получить блокировку для записи тика в течении " + count + " сек"); } } } } try { if ((lastBar == null) || (lastBar.DT < bar.DT) || ((lastBar.DT == bar.DT) && (lastBar.Number < bar.Number))) { if (changeFrom > data.Count) { changeFrom = data.Count; } lastBar = bar; data.Add(bar); } else { if (lastBar.Number == bar.Number) { return; } else { int index; if (!BarExists(bar, out index)) { data.Insert(index, bar); if (changeFrom > index) { changeFrom = index; } } else { return; } } } ++Count; #if FileTest ONLY4TEST_notGarbage = data; #else TicksFileSaver.Add4Save(this, data); #endif } finally { _lock.ReleaseWriterLock(); } }
public void Stop() { TicksFiles.Save(); TicksFileSaver.Stop(); }