Подключение к Quik и запуск DDE
Atom Ответить
24.01.2011


vvt

Фотография
Пробую подключение к Quik и запуск DDE из примеров (Sample, SampleSMA).
Все происходит очень медленно, поискал по форуму, есть несколько сообщений с такими же проблемами.
Железо вроде не самое слабое (Phenom II X2 555/8Gb/SSD), система Windows 7 Ultimate 64bit.
Запускаются Quik и примеры от имени администратора.
Хотелось бы все-таки с помощью Михаила докопаться до возможных причин таких тормозов.

В связи с этим первый вопрос:
после установки соединения с Квиком через QuikTrader.Connect() и поступления события Connected секунд где-то через 10 в Квике появляется окно "Выбор активных счетов и задание их очередности", которое висит и пропадает где-то через 30 секунд.
Так и должно быть?


Вот код этого консольного приложения:
Код
            Console.WriteLine("Запуск...");

            try
            {
                var waitHandle = new AutoResetEvent(false);

                // создаем шлюз к Quik-у
                var trader = new QuikTrader(@"C:\FinamJunior\info.exe");

                // подписываемся на событие успешного подключения
                // все действия необходимо производить только после подключения
                trader.Connected += () =>
                {
                    Console.WriteLine("Подключение было произведено успешно.");

                    // извещаем об успешном соединени
                    waitHandle.Set();
                };

                Console.WriteLine("Производим подключение...");

                trader.Connect();

                // дожидаемся события об успешном соединении
                waitHandle.WaitOne();
                Console.ReadKey();

                trader.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.ReadKey();
            }

Теги:


Спасибо:




59 Ответов
1 2 3  >
Valdis

Фотография
Дата: 24.01.2011
Ответить


у меня тож примерно так же . секунд 10-30, иногда пошустрей иногда помедленней
Спасибо:

Alexander

Фотография
Дата: 24.01.2011
Ответить


Тоже наблюдаю.

По этому поводу уже была дискуссия - подобное наблюдается только на Windows 7 (как 32bit, так и 64bit) и связано именно
со стартом DDE в этой операционной системе (под Windows XP всё моментально).

Если я не ошибаюсь, то:
Из окна "Выбор активных счетов и задание их очередности" экспортируются все текущие счета в квике и задаются портфели.
Данный экспорт запускается подленным и его медлительность также связаны с особенностью работы Квика в Windows 7.
Спасибо:

vvt

Фотография
Дата: 24.01.2011
Ответить


Ну до старта DDE еще не дошло дело.
Если я правильно понимаю, то приложение сначала ждет появления окна "Выбор активных счетов и задание их очередности" и после его появления должно программно нажать кнопку "Да". Но почему оно это делает так медленно?
Автор топика
Спасибо:

vvt

Фотография
Дата: 01.02.2011
Ответить


Похоже медленное подключение к Квику и запуск ДДЕ происходит из-за множества открытых окон программ (в моем случае Internet Explorer-а с кучей вкладок в каждой), чем их больше, тем медленнее идет процесс. Сейчас запущен только Google Chrome с 30-ю вкладками и сам Квик, соединение и запуск ДДЕ происходит за 16 секунд вместо 4 минут...
Автор топика
Спасибо:

dart

Фотография
Дата: 01.02.2011
Ответить


vvt Перейти
Похоже медленное подключение к Квику и запуск ДДЕ происходит из-за множества открытых окон программ (в моем случае Internet Explorer-а с кучей вкладок в каждой), чем их больше, тем медленнее идет процесс. Сейчас запущен только Google Chrome с 30-ю вкладками и сам Квик, соединение и запуск ДДЕ происходит за 16 секунд вместо 4 минут...

Попробуйте на ХР. Выше уже писали что на В7 весь этот процесс занимает больше времени.
Моё ИМХО, что это не связано именно с S#.
Такое поведение многие отмечали у многих дотнетовских программ при переходе с ХР на В7.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.02.2011
Ответить


dart Перейти
vvt Перейти
Похоже медленное подключение к Квику и запуск ДДЕ происходит из-за множества открытых окон программ (в моем случае Internet Explorer-а с кучей вкладок в каждой), чем их больше, тем медленнее идет процесс. Сейчас запущен только Google Chrome с 30-ю вкладками и сам Квик, соединение и запуск ДДЕ происходит за 16 секунд вместо 4 минут...

Попробуйте на ХР. Выше уже писали что на В7 весь этот процесс занимает больше времени.
Моё ИМХО, что это не связано именно с S#.
Такое поведение многие отмечали у многих дотнетовских программ при переходе с ХР на В7.


Не смотрел еще причину, но думаю что и да и нет. S# использует поиск окон (что само по себе не быстрый процесс). Возможно в Win7 это работает медленнее, так как безопасность все время расширяется, а ее расширение постепенно подминает и производительность.

На следующей неделе я постараюсь с этим разобраться. Но сразу оговорюсь, ждать чуда не стоит. Если это можно поправить моими силами и в самом S#, я это сделаю. Иначе, увы.
Спасибо:

Den

Фотография
Дата: 10.03.2011
Ответить


Mikhail Sukhov Перейти


Не смотрел еще причину, но думаю что и да и нет. S# использует поиск окон (что само по себе не быстрый процесс). Возможно в Win7 это работает медленнее, так как безопасность все время расширяется, а ее расширение постепенно подминает и производительность.

На следующей неделе я постараюсь с этим разобраться. Но сразу оговорюсь, ждать чуда не стоит. Если это можно поправить моими силами и в самом S#, я это сделаю. Иначе, увы.


Решил написать свои изыскания:

на одном форуме читал про проблему, что GetPixel стал работать в десятки раз медленнее на Win7 по сравнению с Win XP.
Человеку надо было читать цвет пикселей игрушки, запущенной в браузере. В итоге он разобрался и написал следущее:

"если получать пиксель используя хэндл рабочего стола (или контекст ус-ва, связанный с раб. столом в случае с GetPixel()), то тупит , если использовать например хэндл браузера, то работает быстро. Вот такая вот магия... "

Михаил, возможно из этого вы по аналогии сможете решить проблему долгого поиска окон на Win7: брать Handle от окна Quik для поиска таблиц.
Спасибо:

Артем_2

Фотография
Дата: 21.06.2011
Ответить


Очень бесит сидеть на XP только из-за экспорта по DDE Confused...Михаил можно ли выложить кусок чек кода, который запускает экспорт какой-нить таблицы с при менением поиска окон?- Может совместными усилиями получится нагуглить причину тормозов.
Спасибо:

Alexander

Фотография
Дата: 21.06.2011
Ответить


Артем_2 Перейти
Очень бесит сидеть на XP только из-за экспорта по DDE Confused...Михаил можно ли выложить кусок чек кода, который запускает экспорт какой-нить таблицы с при менением поиска окон?- Может совместными усилиями получится нагуглить причину тормозов.


Давно под 7кой пробовали? :)
Относительно недавно был фикс, у меня сейчас работает реально шустро.
Спасибо:

Артем_2

Фотография
Дата: 21.06.2011
Ответить


У меня на рабое семерка(работает в домене), дома виста, и есть комп с XP еще, поэтому есть возможность сравнивать:
W7- я плачу
Vista - в депрессии
XP - Летает

Особенно поражает разница в скорости работы верифаера... В XP он как на межгалактической станции отрабатывает, а в W7 или Vista гораздо медленнее. При разработке, во время тестов - это ОЧЕНЬ ограничивает, поэтому лучше сидеть на XP, т.к. в W7 при такой сорости могут нервы не выдержать.
После фикса стал быстрее отрабатывать запуск Quik, но на запуске экспорта я че-то не очень ощутил изменения.
Я вот думаю, может это все связано с появлением WPF в новых операционках,который многослоен, может это как-то увеличивает количество окон, участвующих в поиске, надо Spy++ поковырять...
Спасибо:

Alexander

Фотография
Дата: 21.06.2011
Ответить


Артем_2 Перейти
У меня на рабое семерка(работает в домене), дома виста, и есть комп с XP еще, поэтому есть возможность сравнивать:
W7- я плачу
Vista - в депрессии
XP - Летает

Особенно поражает разница в скорости работы верифаера... В XP он как на межгалактической станции отрабатывает, а в W7 или Vista гораздо медленнее. При разработке, во время тестов - это ОЧЕНЬ ограничивает, поэтому лучше сидеть на XP, т.к. в W7 при такой сорости могут нервы не выдержать.
После фикса стал быстрее отрабатывать запуск Quik, но на запуске экспорта я че-то не очень ощутил изменения.
Я вот думаю, может это все связано с появлением WPF в новых операционках,который многослоен, может это как-то увеличивает количество окон, участвующих в поиске, надо Spy++ поковырять...


Оставь почту, вечером вышлю файл с экспортом
Спасибо:

Артем_2

Фотография
Дата: 21.06.2011
Ответить


Спасибо, вот она!
nazaroid2@mail.ru
Спасибо:

Артем_2

Фотография
Дата: 22.06.2011
Ответить


Увы, че-то не получил ничего...
Спасибо:

Alexander

Фотография
Дата: 22.06.2011
Ответить


Артем_2 Перейти
Увы, че-то не получил ничего...


Вчера очень занят был, сейчас отправил.
Спасибо:

Артем_2

Фотография
Дата: 22.06.2011
Ответить


Понял... Спасибо, все получил! Будем разбираться...
Спасибо:

Den

Фотография
Дата: 06.07.2011
Ответить


Артем_2 Перейти
Понял... Спасибо, все получил! Будем разбираться...


У меня тоже на XP экспорт по DDE летает. На Win7 жутко тормозит - пробовал на 3.2.2, отлаживаться вообще нервов не хватает.
Возможно коммент #8 может помочь разобраться...
Спасибо:

Артем_2

Фотография
Дата: 07.07.2011
Ответить


Есть идеи как сделать оптимизацию, но к сожалению, пока не пробовал их воплотить, т.к. нахожусь в отпуске. Обязательно сообщу че и как, когда поковыряюсь
Спасибо:

Артем_2

Фотография
Дата: 07.07.2011
Ответить


Если не получится, то по форумам вопросы раскидаю...
Спасибо:

Артем_2

Фотография
Дата: 14.07.2011
Ответить


Всем доброго дня!
Пока что изыскания следующие:

1. Небольшая статистика запуска 2-х таблиц квика (инструменты и позиции по деривативам) по дде показала, что разница весьма существенная. В моем примере виста отработала в 9 раз медленнее. Статистика условная, т.к. конфигурации компьютеров были разными, хотя и похожими.

Vista

Запуск экспорта по ДДЕ
Выпонение метода GetQuikWindows(Process process) заняло 0,3300634 секунд. Метод вернул 12 из 565 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,3549551 секунд. Метод вернул 12 из 565 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,329384 секунд. Метод вернул 13 из 566 окон
Открытие DDE окна => Выпонение метода WaitFor заняло 0,6904268 секунд
Остановка DDE вывода => Выпонение метода WaitFor заняло 0,0019952 секунд
Запуск DDE вывода => Выпонение метода WaitFor заняло 0,004298 секунд
Выпонение метода GetQuikWindows(Process process) заняло 0,355389 секунд. Метод вернул 12 из 566 окон
Закрытие DDE окна => Выпонение метода WaitFor заняло 0,355694 секунд
Запуск окна с заголовком <инструменты> занял 1,3918877 секунд

Выпонение метода GetQuikWindows(Process process) заняло 0,3480023 секунд. Метод вернул 12 из 565 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,3566171 секунд. Метод вернул 12 из 565 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,3168064 секунд. Метод вернул 13 из 566 окон
Открытие DDE окна => Выпонение метода WaitFor заняло 0,6788765 секунд
Остановка DDE вывода => Выпонение метода WaitFor заняло 0,0020404 секунд
Запуск DDE вывода => Выпонение метода WaitFor заняло 0,0029838 секунд
Выпонение метода GetQuikWindows(Process process) заняло 0,3298589 секунд. Метод вернул 12 из 566 окон
Закрытие DDE окна => Выпонение метода WaitFor заняло 0,3300634 секунд
Запуск окна с заголовком <позиции по деривативам> занял 1,3701531 секунд

Запуск ДДЕ занял: 2,762106 секунд

XP

Запуск экспорта по ДДЕ
Выпонение метода GetQuikWindows(Process process) заняло 0,0347218 секунд. Метод вернул 15 из 263 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,0358152 секунд. Метод вернул 15 из 263 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,0357294 секунд. Метод вернул 16 из 264 окон
Открытие DDE окна => Выпонение метода WaitFor заняло 0,0836615 секунд
Остановка DDE вывода => Выпонение метода WaitFor заняло 0,0018648 секунд
Запуск DDE вывода => Выпонение метода WaitFor заняло 0,0039082 секунд
Выпонение метода GetQuikWindows(Process process) заняло 0,0349754 секунд. Метод вернул 15 из 263 окон
Закрытие DDE окна => Выпонение метода WaitFor заняло 0,0351794 секунд
Запуск окна с заголовком <инструменты> занял 0,1647161 секунд

Выпонение метода GetQuikWindows(Process process) заняло 0,036516 секунд. Метод вернул 15 из 263 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,0351818 секунд. Метод вернул 15 из 263 окон
Выпонение метода GetQuikWindows(Process process) заняло 0,0350804 секунд. Метод вернул 16 из 264 окон
Открытие DDE окна => Выпонение метода WaitFor заняло 0,0727249 секунд
Остановка DDE вывода => Выпонение метода WaitFor заняло 0,0012032 секунд
Запуск DDE вывода => Выпонение метода WaitFor заняло 0,0029322 секунд
Выпонение метода GetQuikWindows(Process process) заняло 0,0363536 секунд. Метод вернул 15 из 263 окон
Закрытие DDE окна => Выпонение метода WaitFor заняло 0,0365615 секунд
Запуск окна с заголовком <позиции по деривативам> занял 0,1561724 секунд

Запуск ДДЕ занял: 0,320936 секунд


2. Удалось локализовать функцию, которая тормозит. - Это AllToplevelWindows, эта функция вызывается в S# для получения списка окон квика.- AllToplevelWindows в свою очередь вызывает из библиотеки ManagedWinapi.dll функцию FilterToplevelWindows.
3. В тестах видно, что AllToplevelWindows в висте возвращает гораздо большее количество окон 565 чем в XP 263. Интересно, что удаление значков из трея в висте значительно уменьшило количество окон (565 скатилось до 415) и работа с окнами в моем случае стала работать примерно в 2 раза быстрее. Но если наоткрывать вкладок в браузере, то скорость очень значительно снижается.
4. Я вывел заголовки окон в висте и XP, в висте оказалось гораздо больше пока непонятных окон без заголовков (330), чем в XP, где такие тоже имеются, но их меньше 152.
5. Пока это все, что удалось выяснить. Если у кого-то есть идеи и мнения на этом этапе, которые смогут ускорить процесс решения проблемы, пишите, пожалуйста.
Спасибо: Alexander sun

Alexander

Фотография
Дата: 14.07.2011
Ответить


Артём, спасибо.
Посмотрю сегодня чего да как.

Кроме тебя ни у кого нет доступа к этим методам, поэтому названия остальным мало что скажут :)
Спасибо:

Alexander

Фотография
Дата: 14.07.2011
Ответить


AllToplevelWindows - это уже свойство в ManagedApi.dll
Спасибо:

dart

Фотография
Дата: 14.07.2011
Ответить


Кстати по теме. В W7 х64 ДДЕ достаточно быстро запускается. Почти как в ХР.
Версия 2.6.2
Спасибо:

Артем_2

Фотография
Дата: 14.07.2011
Ответить


Цитата:
Артём, спасибо.
Посмотрю сегодня чего да как.

Кроме тебя ни у кого нет доступа к этим методам, поэтому названия остальным мало что скажут :)


Да, у меня тоже собственно не было... Располагал только классом QuikTrminalConfused. Я думал
ManagedWinapi.dll заимствованная библиотека:

http://mwinapi.sourcefor...AllDescendantWindows.htm
Спасибо:

Alexander

Фотография
Дата: 14.07.2011
Ответить


Артем_2 Перейти
Цитата:
Артём, спасибо.
Посмотрю сегодня чего да как.

Кроме тебя ни у кого нет доступа к этим методам, поэтому названия остальным мало что скажут :)


Да, у меня тоже собственно не было... Располагал только классом QuikTrminalConfused. Я думал
ManagedWinapi.dll заимствованная библиотека:

http://mwinapi.sourcefor...AllDescendantWindows.htm



Верно, так и есть.
Только http://mwinapi.sourcefor...w_AllToplevelWindows.htm - вот как раз AllToplevelWindows.
Не совсем понял откуда взялось FilterToplevelWindows в выводах
Спасибо:

Артем_2

Фотография
Дата: 14.07.2011
Ответить


Цитата:
Дата: меньше минуты назад
Артем_2;8981 написал:
Цитата:
Артём, спасибо.
Посмотрю сегодня чего да как.

Кроме тебя ни у кого нет доступа к этим методам, поэтому названия остальным мало что скажут :)


Да, у меня тоже собственно не было... Располагал только классом QuikTrminal. Я думал
ManagedWinapi.dll заимствованная библиотека:

http://mwinapi.sourcefor...AllDescendantWindows.htm



Верно, так и есть.
Только http://mwinapi.sourcefor..._AllToplevelWindows.htm - вот как раз AllToplevelWindows.
Не совсем понял откуда взялось FilterToplevelWindows в выводах


Это я залез через задний так сказать проход внутрь AllToplevelWindows и определил, что
Код

        public static SystemWindow[] AllToplevelWindows
        {
            get
            {
                return SystemWindow.FilterToplevelWindows(new Predicate<SystemWindow>(SystemWindow.ALL.Invoke));
            }
        }
Спасибо:
1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy