sun
|
Дата: 15.07.2011
А может спросить у Микрософта? Если кто может грамотно поставить вопрос. Мол, пацаны, такая хрень происходит, что на вин7 тормоза нереальные появляются, что думаете, куда смотреть и т.д.
Сижу на вин7, после 14.00 тестировать невозможно, время включения дде до 20 мин... а утром 2-5 мин!!! после 16.00 дде вообще не поднимется за какоето измеряемое время...
|
|
Спасибо:
|
|
|
|
|
Maxim K.
|
Дата: 15.07.2011
Странно, пользуюсь Win7, но экспорт стартует достаточно быстро (секунд 15 максимум, если по всем возможным таблицам) независимо от времени суток...
|
|
Спасибо:
|
|
|
|
|
sun
|
Дата: 15.07.2011
Я вам завидую. Но похоже проблема существует реально. Возможно дело в настройке вин7, возможно в связке с железом или что-то еще. У меня совершенно четкая связь времени суток и скорости вкллючения дде.
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 15.07.2011
Использую Windows Server 2008R2 x64,старт экспорта конечно медленней чем на Win2003, но запуск проходит секунд за 30 максимум. Время запуска сильно зависит от количества открытых окон, а так же от количества вкладок в опере. Зависимости от времени суток нет. Цитата:Да, вот я думаю, может быть можно как-то кэшировать окна, а не производить посик каждый раз по всему списку открытых окон. На rsdn, конечно, тоже надо будет написать Так список открытых окон меняется и нужное нам окно открывается только перед самым поиском Цитата:Сижу на вин7, после 14.00 тестировать невозможно, время включения дде до 20 мин... а утром 2-5 мин!!! после 16.00 дде вообще не поднимется за какоето измеряемое время... А если попробовать перезагрузить компьютер и запустить экспорт, за сколько он пройдет? Можно еще попробовать отключить все навороты интерфейса и тоже замерить время старта экспорта.
|
|
Спасибо:
|
|
|
|
|
Артем_2
|
Дата: 18.07.2011
Коллеги, проблема локализована(см. #28,#30), - это функция EnumWindows из user32.dll,которая фигово работает в виндоусе после висты. Сегодня я напишу письмо на форумах, с вопросом откуда такая несправедливость и есть ли достойные альтернативы. Если там не получится, то я за то, чтобы искать другое решение, т.к. очевидно проблему надо решать. Уверен, при содействии таких мастеров как Михаил и Александр решение обязательно найдется.
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 18.07.2011
|
|
|
|
Артем_2 Коллеги, проблема локализована(см. #28,#30), - это функция EnumWindows из user32.dll,которая фигово работает в виндоусе после висты. Как писал выше, у меня на W2K8 все отрабатывает довольно быстро, у Maxim K. на Win7 тоже без задержек. Графический интерфейс у меня классический, у вас Aero? Много ли открытых окон или вкладок в браузере? Сейчас отдельно проверил у себя время работы функции EnumWindows. Программа в аттаче, код следующий: Код
namespace ConsoleApplication3
{
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
internal class Program
{
#region Delegates
public delegate bool CallBackPtr(int hwnd, int lParam);
#endregion
[DllImport("user32.dll")]
public static extern int EnumWindows(CallBackPtr callPtr, int lPar);
public static bool Handler(int hwnd, int lParam)
{
//Console.WriteLine("Window handle is " + hwnd);
return true;
}
private static void Main(string[] args)
{
var watch = Stopwatch.StartNew();
EnumWindows(Handler, 0);
watch.Stop();
Console.WriteLine("Total time: {0}", watch.Elapsed);
Console.ReadLine();
}
}
}
На Windows Server 2008R2 x86 он выполняется за "Total time: 00:00:00.0009447". Что программа выведет у вас?
|
|
Спасибо:
|
|
|
|
|
Артем_2
|
Дата: 18.07.2011
Уменя На w7 x86 за "Total time: 00:00:00.0008483".
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 18.07.2011
Артем_2 Уменя На w7 x86 за "Total time: 00:00:00.0008483". Тогда почему вы решили, что тормозит именно эта функция?
|
|
Спасибо:
|
|
|
|
|
Артем_2
|
Дата: 18.07.2011
Потому что она вызывается в #28. Но конкретно по EnumWindows я замеры не делал, т.к. замучился в исследовниях и как-то решил, что дело именно в ней, раз она ключевая в FilterToplevelWindows да и проблема привязана к платформе Код
public static SystemWindow[] FilterToplevelWindows(Predicate<SystemWindow> predicate)
{
List<SystemWindow> wnds = new List<SystemWindow>();
SystemWindow.EnumWindows((SystemWindow.EnumWindowsProc)((hwnd, lParam) =>
{
SystemWindow local_0 = new SystemWindow(hwnd);
if (predicate(local_0))
wnds.Add(local_0);
return 1;
}), new IntPtr(0));
return wnds.ToArray();
}
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 18.07.2011
|
|
|
|
Артем_2 Потому что она вызывается в #28. Но конкретно по EnumWindows я замеры не делал, т.к. замучился в исследовниях и как-то решил, что дело именно в ней, раз она ключевая в FilterToplevelWindows да и проблема привязана к платформе Откуда вызывается FilterToplevelWindows? Из SystemWindow.AllToplevelWindows? Возьмем следующий пример: Код
namespace ConsoleApplication3
{
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using ManagedWinapi.Windows;
internal class Program
{
#region Delegates
public delegate bool CallBackPtr(int hwnd, int lParam);
#endregion
[DllImport("user32.dll")]
public static extern int EnumWindows(CallBackPtr callPtr, int lPar);
private static void Main(string[] args)
{
var watch = Stopwatch.StartNew();
var windowsCount = 0;
EnumWindows((hwnd, lParam) =>
{
windowsCount++;
return true;
}, 0);
watch.Stop();
Console.WriteLine("EnumWindows time: {0} Windows count: {1}", watch.Elapsed, windowsCount);
watch = Stopwatch.StartNew();
var wins = SystemWindow.AllToplevelWindows;
watch.Stop();
Console.WriteLine("AllToplevelWindows time: {0} Windows count: {1}", watch.Elapsed, wins.Length);
Console.ReadLine();
}
}
}
Вывод: Цитата:EnumWindows time: 00:00:00.0014409 Windows count: 374 AllToplevelWindows time: 00:00:00.0024402 Windows count: 374
|
|
Спасибо:
|
|
|
|