eugene20237
|
Дата: 29.10.2015
Такое ощущение, что весь интерфейс тормозной у S#. Во всех продуктах. Может из-за каких-то библиотек. Не знаю вобщем [mellow]
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 31.10.2015
eugene20237 Такое ощущение, что весь интерфейс тормозной у S#. Во всех продуктах. Может из-за каких-то библиотек. Не знаю вобщем [mellow] Может драйвера. Интерфейс на WPF от .NET 4.0 Сравнительно свежая технология. Старые ОС или компьютеры могут не иметь обновления.
|
|
Спасибо:
|
|
|
|
|
Vitaly48
|
Дата: 02.11.2015
я когда только начал разбираться, вообще несколько дней думал он у меня не отрисовывается из-за того, что я видел пустой фон диаграммы и закрывал форму, только потом понял, что нужно подождать некоторое время что бы он начал рисовать свечки! а теперь привык, даже прикольно, как будто фильм смотришь, видишь куда в таймфрейме ходили свечки, в каком месте свечи было больше сделок ))
|
|
Спасибо:
|
|
|
|
|
Валентин Лебедев
|
Дата: 02.11.2015
Попробуй вызывать Draw не для каждой отдельной свечи, а передать в него все свечи сразу, одной коллекцией. Была подобная проблема, решил именно таким образом, теперь рисует быстро.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 03.11.2015
Vitaly48 я когда только начал разбираться, вообще несколько дней думал он у меня не отрисовывается из-за того, что я видел пустой фон диаграммы и закрывал форму, только потом понял, что нужно подождать некоторое время что бы он начал рисовать свечки! а теперь привык, даже прикольно, как будто фильм смотришь, видишь куда в таймфрейме ходили свечки, в каком месте свечи было больше сделок )) Не путайте процесс передачи данных и скроллинг. Автор, если не врет, заявляет о торможении всех компонентов. В том числе и тех, которые к графику и свечам не имеют отношения. Такое может быть только в случае или морально устаревшего железа или отсутствия драйверов.
|
|
Спасибо:
|
|
|
|
|
Vitaly48
|
Дата: 03.11.2015
Валентин Лебедев Попробуй вызывать Draw не для каждой отдельной свечи, а передать в него все свечи сразу, одной коллекцией. Была подобная проблема, решил именно таким образом, теперь рисует быстро. Валентин, а Вы не могли бы пояснить, а лучше кинуть примерчик ) как Вы в Draw передаете не одну, а все свечи сразу? спасибо! >Mikhail Sukhov Михаил, к компонентам претензий ни каких нет, все работает четко, за месяц знакомств с ними не было ни каких глюков или крашей, тьфу-тьфу-тьфу ) все работает как часы, немного напрягают моменты в плане избыточной накрученности, мне бы лично хватило бы и десятой части, если не сотой, того функционала, что представлен в этой библиотеке!
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 03.11.2015
Vitaly48 Михаил, к компонентам претензий ни каких нет, все работает четко Дело не в том, есть у вас претензии или нет. А в том, что вы в одном топике мешаете разные темы. И путаете потеницально тех, кто будет читать спустя какое то время. Не надо писать в топики по принципу ключевых слов.
|
|
Спасибо:
|
|
|
|
|
Валентин Лебедев
|
Дата: 03.11.2015
Отправляем каждую свечку для прорисовки по отдельности: Код
foreach (var candle in candles)
{
chart.Draw(candleElement, candle);
}
Отправляем все свечки на прорисовку разом: Код
chart.Draw(
candles.Select(
candle =>
new RefPair<DateTimeOffset, IDictionary<IChartElement, object>>(candle.OpenTime,
new Dictionary<IChartElement, object> {{candleElement, candle}})));
Второй вариант работает гораздо быстрее.
|
|
|
|
|
Vitaly48
|
Дата: 04.11.2015
Валентин Лебедев Отправляем каждую свечку для прорисовки по отдельности: Код
foreach (var candle in candles)
{
chart.Draw(candleElement, candle);
}
Отправляем все свечки на прорисовку разом: Код
chart.Draw(
candles.Select(
candle =>
new RefPair<DateTimeOffset, IDictionary<IChartElement, object>>(candle.OpenTime,
new Dictionary<IChartElement, object> {{candleElement, candle}})));
Второй вариант работает гораздо быстрее. Спасибо, с первым кодом все понятно, но второй... это для меня слишком круто, ух, буду разбираться )) но все равно спасибо еще раз! > Mikhail Sukhov Да, я понял, сори за офтоп, такое больше не повториться!
|
|
Спасибо:
|
|
|
|
|
agat50
|
Дата: 26.05.2016
|
|
|
|
Тоже столкнулся, на исторических данных свечка с индюком могла рисоваться секунду. Профайлер показал множественные затыки на Monitor.Enter внутри стокшарпа. Решил переделкой на async void: Было: Цитата: _candleManager = new CandleManager(_smartTrader); _candleManager.Processing += CandleManagerOnProcessing;
private void CandleManagerOnProcessing(CandleSeries candleSeries, Candle candle) { //... }
Стало: Цитата: _candleManager = new CandleManager(_smartTrader); _candleManager.Processing += CandleManagerOnProcessing; private readonly SemaphoreSlim _candleManagerOnProcessingSyncRoot = new SemaphoreSlim(1); private async void CandleManagerOnProcessing(CandleSeries candleSeries, Candle candle) { await _candleManagerOnProcessingSyncRoot.WaitAsync(); try { //... } catch (Exception e) { _logManager.Application.AddErrorLog(e); } finally { _candleManagerOnProcessingSyncRoot.Release(); } }
Стало рисовать сильно быстрее и равномерно. P.S. Цитата: private readonly SemaphoreSlim _candleManagerOnProcessingSyncRoot = new SemaphoreSlim(1); private readonly ConcurrentQueue<Tuple<CandleSeries, Candle>> _candlesQueue = new ConcurrentQueue<Tuple<CandleSeries, Candle>>();
private void CandleManagerOnProcessing(CandleSeries candleSeries, Candle candle) { _candlesQueue.Enqueue(Tuple.Create(candleSeries, candle)); ProcessCandleQueue(); }
private async void ProcessCandleQueue() { await _candleManagerOnProcessingSyncRoot.WaitAsync(); try { Tuple<CandleSeries, Candle> n; while (_candlesQueue.TryDequeue(out n)) { var candleSeries = n.Item1; var candle = n.Item2;
Или так, ещё шустрее. P.P.S А, нет, всё-равно тормозит иногда (и начинает жрать память при этом (1.5гб на минутный график за 5 дней, и это не _candlesQueue), причём непонятно от чего зависит - иногда пролетает мгновенно, иногда нет... На Draw(IEnumerable<RefPair) тоже переделывал, разницы нет.
|
|
Спасибо:
|
|
|
|