Здравствуйте, AndrewVK, Вы писали:
AVK>Представить себе каталог, который будет обрабатываться 5-6 часов я не в состоянии. Так что, как видишь, виноват не дотнет.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Ну в общем прошло уже несколько больше года. Да и ладно уж "крупные". Хотя бы один пример коммерческого проекта под дотнет "широкого" масштаба.
Насколько широкого масштаба? Что какой нибудь WinRar ждешь дотнетовский или ErWin. Такие тиражные продукты имеют долгую историю с постепенными переходами от версии к версии, так просто не перескочишь на дотнет.
А так дотнетизируемся все равно потихоньку на новых продуктах. Мы вот внесли свой вклад, московскую "Планету фитнес" задотнетизировали недавно. Не широкомасштабный продукт, но несколько десятков рабочих мест, ну может сотня будет. Именно настольные клиенты, зачем юзерам мучаться с броузерами, проще один раз фреймворк установить. А альтернативы и небыло для настольной части кроме как WinForms, на чем еще можно быстро реализовать механизм полуавтоматического строгания сотни навороченых форм. Очень малыми силами делался проект. И к тому же махом привинчивались фсякие аппаратные фичи типа цифровых фотокамер, читалок смарткарт.
Сейчас еще один проект делаем для них, естейственно на дотнете. В нем вобще интерфейсная часть навороченая, полностью все рисованое начиная со скролбаров с полупрозрачными ползунками и кончая таблицами.
В графике тоже альтернатив не видно — дотнет и GDI+ в этом деле рулят. Теоретически GDI+ тормозной, а на практике это никак не сказывается, так получается что не возникает ситуаций что надо одновременно весь экран перерисовывать со скоростью 40 кадров в секунду. Да ни начем больше это не сделаешь, не тратить же один человеко/год на разработку рисованых контролов.
Так что дотнет вещь очень юзабельная, дай ему только время развернуться.
Re[25]: Массивы в C#
От:
Аноним
Дата:
28.08.03 19:45
Оценка:
А я вот создал новый пустой проект, хотел потестить, скопировал второй листинг, а он не пашет — выдаёт ошибку вот в этой строке —
Hello, VladD2!
You wrote on Thu, 28 Aug 2003 18:38:03 GMT:
хъ
V> Больше небыло? Ай-йа-йа. Ну, это потому что ты свой код не запускаешь. V> Мы тут запустили код к твоей статье про печать в ВТЛ, и ты представляешь V> (?) поймали тот самый AV. Наверно мы криворукие.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Dispose специально закоментировал, так как без него быстрее. Получилось на AS>папке temp 51 файл в секунду. Что очень не плохо.
Ну судя по моим результатам 45328/140.84 получается примерно 322 файла в секунду. На самом деле это даже заниженая цифра, поскольку в момент теста я еще и сообщения в янусе читал. Так что зря ты диспозы повыкидывал.
AS>Неужели все дело было в дополнительных объектаз-параметрах, которые не AS>убивались?
Скорее в том что работа с одним коннекшеном вобще без диспозов любых объектов оставляет какие то ресурсы mssql неосвобожденными. Надо было глядеть память не программы а mssql и смотреть его счетчики.
Здравствуйте, VladD2, Вы писали:
AVK>>Представить себе каталог, который будет обрабатываться 5-6 часов я не в состоянии. Так что, как видишь, виноват не дотнет.
VD>Подъезжай как-нить покажу.
320 файлов/сек. 6ч * 3600 = 21600 сек. Примерно 7 миллионов файлов! Ты ничего не путаешь?
Здравствуйте, <Аноним>, Вы писали:
А>А я вот создал новый пустой проект, хотел потестить, скопировал второй листинг, а он не пашет — выдаёт ошибку вот в этой строке — А>
А>DirectoryInfo dirInfo = new DirectoryInfo(path);
А>
Ошибка какая? Может ты параметры в командной строке не задал? Нужно первым параметром путь к каталогу, а вторым true для рекурсивного разбора или false для разбора только верхнего уровня.
Здравствуйте, VladD2, Вы писали:
_>>А если еще и команды заготовить заранее, а в цикле только задавать значения параметров? VD>Получишь пару процентов выигрыша.
Может, и меньше — SqlCommand не держит unmanaged-ресурсов. Но практика полезная, при использовании OleDbCommand каждое создание команды по сравнению с повторным использованием — вызов IDBCreateCommand.CreateCommand и байндинг параметров заново.
Hello, AndrewVK!
You wrote on Fri, 29 Aug 2003 06:20:35 GMT:
AS>> Dispose специально закоментировал, так как без него быстрее. AS>> Получилось на папке temp 51 файл в секунду. Что очень не плохо.
A> Ну судя по моим результатам 45328/140.84 получается примерно 322 файла в A> секунду. На самом деле это даже заниженая цифра, поскольку в момент A> теста я еще и сообщения в янусе читал. Так что зря ты диспозы A> повыкидывал.
Раскоментировал диспозы и запустил на папке program files. Там у меня
примерно 68 тыс. файлов. Первые несколько минут работало все шустро, но
потом — опять тормоза. Машинка у меня не сильная: Celeron 950, 256 Mb.
Поставил счетчики на все, что можно (уже потом, когда конкретно все
тормозило). SQL Server не тормозит, с ним все пучком. память не растет и
вообще все стабильно.
Меня больше заинтересовали счетчики .net memory
Ситуация такая: первое поколение все время растет. 0 поколение стабильно и
не растет почти всегда. Иногда скачок в нем приводит к увеличению 1
поколения, после чего в 0 поколении все нормализуется. Вместе с 1 поколением
растет, естественно bytes in heap.
Потом, когда 1 поколение уж очень сильно нахапает памятухи оно собирается и
увеличивается второе поколение (вообще-то оно постоянно увиличивается, но по
тихоньку). Очень сильно увеличивается только в момент сбора в первом
поколении.
Короче, лик очевидный.
Но где?
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Раскоментировал диспозы и запустил на папке program files. Там у меня AS>примерно 68 тыс. файлов. Первые несколько минут работало все шустро, но AS>потом — опять тормоза.
Вывод — не те диспозы . У меня ведь не тормозит. Ищи причину дальше.
AS> Машинка у меня не сильная: Celeron 950, 256 Mb.
Ну не намного хуже моей.
AS>Короче, лик очевидный. AS>Но где?
Здравствуйте, AndrewVK, Вы писали:
_>>Может, и меньше — SqlCommand не держит unmanaged-ресурсов. AVK>А если Prepare() позвать?
Тогда команда будет держаться в памяти до закрытия соединения. Ну разве что можно изменить текст или параметры и выполнить заново, что вызовет Unprepare, но это извращение.
Кстати, Dispose у SqlCommand вообще не используется.
Hello, AndrewVK!
You wrote on Fri, 29 Aug 2003 09:11:22 GMT:
хъ
Короче, залил я эти файлы: Process 75113 files in 02:56:01.6160000.
Я не понимаю, в чем отличия твоего кода от моего, кроме переоткрытия
соединени каждый раз в фунции Process.
With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[27]: Массивы в C#
От:
Аноним
Дата:
29.08.03 22:51
Оценка:
AVK>Ошибка какая? Может ты параметры в командной строке не задал? Нужно первым параметром путь к каталогу, а вторым true для рекурсивного разбора или false для разбора только верхнего уровня.
Теперь ошибка такая "An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in system.data.dll Additional information: System error." в строке:
try
{
cmd.ExecuteNonQuery();
}
видать Sql не подключен. Извеняюсь — не скажете как его подрубить?
Здравствуйте, Alexey Shirshov, Вы писали:
V>> Больше небыло? Ай-йа-йа. Ну, это потому что ты свой код не запускаешь. V>> Мы тут запустили код к твоей статье про печать в ВТЛ, и ты представляешь V>> (?) поймали тот самый AV. Наверно мы криворукие.
AS>Где?
Вообще-то тебе было об этом сказано и ты вроде даже поправил. Но факт есть факт.
AS>Приводи ошибку, посмотрим, кто виноват.
Если не ошибаюсь это был вот этот код:
//Получение хэндла принтера по умолчанию
HANDLE hPrinter;
DWORD dwSz = 0x100;
DWORD dwLastErr = -1;
PTSTR pBuf = 0;
while (!GetDefaultPrinter(pBuf,&dwSz))
{
dwLastErr = GetLastError();
if (dwLastErr == ERROR_INSUFFICIENT_BUFFER){
if (pBuf) delete[] pBuf;
pBuf = new TCHAR[dwSz];
dwLastErr = ERROR_SUCCESS;
}
else break;
}
if (dwLastErr == ERROR_SUCCESS){
OpenPrinter(pBuf, &hPrinter, NULL);
}
if (pBuf) delete[] pBuf;
// Получение структуры PRINTER_INFO_2 для данного хэндла
LPBYTE pBufpi = 0;
DWORD dwSzNeeded = 0;
dwLastErr = -1;
while (!GetPrinter(hPrinter,2,pBufpi,dwSzNeeded,&dwSzNeeded))
{
dwLastErr = GetLastError();
if (dwLastErr == ERROR_INSUFFICIENT_BUFFER){
if (pBufpi) delete[] pBufpi;
pBufpi = new BYTE[dwSzNeeded];
dwLastErr = ERROR_SUCCESS;
}
else break;
}
if (dwLastErr == ERROR_SUCCESS){
LPPRINTER_INFO_2 pPI = (LPPRINTER_INFO_2)pBufpi;
// Работаем со структурой
HDC hDC = CreateDC(NULL, pPI->pPrinterName, NULL, pPI->pDevMode);
// Работаем с контекстом
// Удаляем контекст
DeleteDC(hDC);
}
if (pBufpi) delete[] pBufpi;
На пашине с Вынь Сервер 2003 без установленных принтреров был АВ. На всех остальных был ассерт об использовании не инициализированной переменной hPrinter. Но С++ тут конечно непричем. Тут проверки написаны через задницу.
В общем, как бы кто крут не был, но позвлять себе других тоже уважать нужно. Ну, или хоть смайлики ставь.
Тут многие не глупее тебя, а многие и умнее.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>320 файлов/сек. 6ч * 3600 = 21600 сек. Примерно 7 миллионов файлов! Ты ничего не путаешь?
Каталог диска открывается только 5 минут. Файлов там не 7 миллионов и но компиляция chm-а идет где-то два часа. И это только один каталог, а таких у нас на некоторых машинах хватает.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Hello, VladD2!
You wrote on Fri, 29 Aug 2003 23:35:35 GMT:
[поскипанный код не относится к последней статье]
V> На пашине с Вынь Сервер 2003 без установленных принтреров был АВ. На V> всех остальных был ассерт об использовании не инициализированной V> переменной hPrinter. Но С++ тут конечно непричем. Тут проверки написаны V> через задницу.
Согласен. Но заметь, код я сразу же, без разговоров переписал. Но ошибка
была и я ее признаю.
V> В общем, как бы кто крут не был, но позвлять себе других тоже уважать V> нужно. Ну, или хоть смайлики ставь. Тут многие не глупее тебя, а многие V> и умнее.