eugene20237
|
Date: 10/29/2015
Такое ощущение, что весь интерфейс тормозной у S#. Во всех продуктах. Может из-за каких-то библиотек. Не знаю вобщем [mellow]
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 10/31/2015
eugene20237:
Такое ощущение, что весь интерфейс тормозной у S#. Во всех продуктах. Может из-за каких-то библиотек. Не знаю вобщем [mellow]
Может драйвера. Интерфейс на WPF от .NET 4.0 Сравнительно свежая технология. Старые ОС или компьютеры могут не иметь обновления.
|
|
|
|
Thanks:
|
|
|
|
|
|
Vitaly48
|
Date: 11/2/2015
я когда только начал разбираться, вообще несколько дней думал он у меня не отрисовывается из-за того, что я видел пустой фон диаграммы и закрывал форму, только потом понял, что нужно подождать некоторое время что бы он начал рисовать свечки!
а теперь привык, даже прикольно, как будто фильм смотришь, видишь куда в таймфрейме ходили свечки, в каком месте свечи было больше сделок ))
|
|
|
|
Thanks:
|
|
|
|
|
|
Валентин Лебедев
|
Date: 11/2/2015
Попробуй вызывать Draw не для каждой отдельной свечи, а передать в него все свечи сразу, одной коллекцией. Была подобная проблема, решил именно таким образом, теперь рисует быстро.
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 11/3/2015
Vitaly48:
я когда только начал разбираться, вообще несколько дней думал он у меня не отрисовывается из-за того, что я видел пустой фон диаграммы и закрывал форму, только потом понял, что нужно подождать некоторое время что бы он начал рисовать свечки!
а теперь привык, даже прикольно, как будто фильм смотришь, видишь куда в таймфрейме ходили свечки, в каком месте свечи было больше сделок ))
Не путайте процесс передачи данных и скроллинг. Автор, если не врет, заявляет о торможении всех компонентов. В том числе и тех, которые к графику и свечам не имеют отношения. Такое может быть только в случае или морально устаревшего железа или отсутствия драйверов.
|
|
|
|
Thanks:
|
|
|
|
|
|
Vitaly48
|
Date: 11/3/2015
Валентин Лебедев:
Попробуй вызывать Draw не для каждой отдельной свечи, а передать в него все свечи сразу, одной коллекцией. Была подобная проблема, решил именно таким образом, теперь рисует быстро.
Валентин, а Вы не могли бы пояснить, а лучше кинуть примерчик ) как Вы в Draw передаете не одну, а все свечи сразу?
спасибо!
Mikhail Sukhov
Михаил, к компонентам претензий ни каких нет, все работает четко, за месяц знакомств с ними не было ни каких глюков или крашей, тьфу-тьфу-тьфу ) все работает как часы, немного напрягают моменты в плане избыточной накрученности, мне бы лично хватило бы и десятой части, если не сотой, того функционала, что представлен в этой библиотеке!
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 11/3/2015
Vitaly48:
Михаил, к компонентам претензий ни каких нет, все работает четко
Дело не в том, есть у вас претензии или нет. А в том, что вы в одном топике мешаете разные темы. И путаете потеницально тех, кто будет читать спустя какое то время.
Не надо писать в топики по принципу ключевых слов.
|
|
|
|
Thanks:
|
|
|
|
|
|
Валентин Лебедев
|
Date: 11/3/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
|
Date: 11/4/2015
Валентин Лебедев:
Отправляем каждую свечку для прорисовки по отдельности:
foreach (var candle in candles)
{
chart.Draw(candleElement, candle);
}
> Отправляем все свечки на прорисовку разом:
> ```csharp
chart.Draw(
candles.Select(
candle =>
new RefPair<DateTimeOffset, IDictionary<IChartElement, object>>(candle.OpenTime,
new Dictionary<IChartElement, object> {{candleElement, candle}})));
Второй вариант работает гораздо быстрее.
Спасибо, с первым кодом все понятно, но второй... это для меня слишком круто, ух, буду разбираться ))
но все равно спасибо еще раз!
Mikhail Sukhov
Да, я понял, сори за офтоп, такое больше не повториться!
|
|
|
|
Thanks:
|
|
|
|
|
|
agat50
|
Date: 5/26/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) тоже переделывал, разницы нет.
|
|
|
|
Thanks:
|
|
|
|
|