Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / .NET (+ и -) / 23 сообщений из 23, страница 1 из 1
20.01.2006, 05:49
    #33493205
Бо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
плюсы и минусы и так далее:) Полтара года пишу на Java, а тут вдруг заваливает чел и базарит "Java - отстой, старьё. C#, .NET - круто". Возразить ему покачто не могу так как нет времени погонять C#.


Лишь тот достоин жизни и свободы, кто каждый день за них идет на бой. И. Гёте
...
Рейтинг: 0 / 0
20.01.2006, 07:55
    #33493242
Zodiac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Эх, молодость, молодость...
...
Рейтинг: 0 / 0
23.01.2006, 09:30
    #33496480
Каракут
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
.NET, по большому счету, это Java, заточенная строго под винду. И в .NET нет ничего такого, чего не нашлось бы в Java, в общем-то.
Плюсы (по сравнению с Java): более высокая производительность (за счет более тесной интеграции с платформой).
Минусы: работает исключительно с виндовозом.
...
Рейтинг: 0 / 0
23.01.2006, 10:01
    #33496532
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
КаракутПлюсы (по сравнению с Java): более высокая производительность (за счет более тесной интеграции с платформой).

Основание не верно. Перформанс поднят за счет оптимизации IL
кода под современные 64-разрядные CPU.

КаракутМинусы: работает исключительно с виндовозом.
Больше всего меня поражает эдакая безапелляционная уверенность
в сказанном. Хоть-бы в Тырнете поГугляли...
...
Рейтинг: 0 / 0
23.01.2006, 10:42
    #33496643
Каракут
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
maytonОснование не верно. Перформанс поднят за счет оптимизации IL
кода под современные 64-разрядные CPU.
А за счет какого чуда на 32-битных платформах он шустрее пупыряется? Основная причина, имхо, меньшее количество уровней абстракции между приложением и native-кодом ОС. Те же Windows Forms работают с WinAPI почти напрямую, с COM-объектами - полностью напрямую, в то время как в Java приходится всячески изголяться (Swing свои контролы вообще сама рисует, от ОС используется только окно, в котором ГУЯ отображается)

maytonБольше всего меня поражает эдакая безапелляционная уверенность
в сказанном. Хоть-бы в Тырнете поГугляли...
В тот день, когда выйдет полноценная рабочая .NET под Линух или FreeBSD, я лично съем без соли все свои книги по Java (а их у меня 4 толстых штуки :))
...
Рейтинг: 0 / 0
25.01.2006, 21:46
    #33503579
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Каракут
А за счет какого чуда на 32-битных платформах он шустрее пупыряется? Основная причина, имхо, меньшее количество уровней абстракции между приложением и native-кодом ОС. Те же Windows Forms работают с WinAPI почти напрямую, с COM-объектами - полностью напрямую, в то время как в Java приходится всячески изголяться (Swing свои контролы вообще сама рисует, от ОС используется только окно, в котором ГУЯ отображается)
[quot]

Ну что-ж.. тоже точка зрения. Может еще расскажите почему
garbage collector у DotNet работает эффективнее? Неужели
за счет COM ?

[quot Каракут]..
Полноценная - вряд-ли когда-нибудь выйдет. Потому-как
само определение ПОЛНОЦЕННОЙ платформы имеет свой
изьян.
...
Рейтинг: 0 / 0
25.01.2006, 21:48
    #33503581
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Млин... протупил.

Каракут..

Ну что-ж.. тоже точка зрения. Может еще расскажите почему
garbage collector у DotNet работает эффективнее? Неужели
за счет COM ?
...
Рейтинг: 0 / 0
25.01.2006, 22:50
    #33503645
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Высокоуровневые средства разработки позволяют тратить большую часть временни не на написание приложения, а на [бесплодные] попытки заставить это работать на компе заказчика так же, как и на компе разработчика
...
Рейтинг: 0 / 0
25.01.2006, 22:56
    #33503650
Tov. Drujba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Sarin, решается сия трабла опытом и только им. Да и не трабла это вовсе, а недостаток знаний.
...
Рейтинг: 0 / 0
26.01.2006, 13:47
    #33505011
AL_KIR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
.NET - сепер
Java - супер в два раза больше

минус у Java - только один - на ней скучно программировать в одиночку :( и второй (но практически не заметный для пишкщего программиста) - по Java меньше русскоязычных ресурсов чем по .NET
...
Рейтинг: 0 / 0
26.01.2006, 21:39
    #33506161
2Бо2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
maytonМлин... протупил.

Каракут..


garbage collector у DotNet

поподробнее можно?
...
Рейтинг: 0 / 0
27.01.2006, 13:05
    #33507279
AL_KIR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
garbage collector - сборщик мусора, это когда программист не высвобождает память после использования - а отдает этот процесс на усмотрение garbage collector

и те и другие Sun и Microsoft - говорят что они у них круто работают

бытует мнение что программы на .Net - несколько быстрее.... а значит и garbage collector у Microsoft работает быстрее
...
Рейтинг: 0 / 0
27.01.2006, 13:12
    #33507311
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
AL_KIRбытует мнение что программы на .Net - несколько быстрее.... а значит и garbage collector у Microsoft работает быстрее

Гмм железная логика. Я бы сказал ЧУГУННАЯ. Уважаемый AL_KIR, а известна ли вам такая маааааленькая деталь как то, что .Net овский сборщик мусора включается никого не спросясь и на время своей работы приостанавливает ВСЕ потоки процесса. Даже те которые к .Net-у не имеют ни малейшего отношения ? В нашем проекте это оказалось настолько НЕУДОБНО, что всю .Net-овскую часть пришлось вынести в out-process COM-сервер :)
...
Рейтинг: 0 / 0
27.01.2006, 15:28
    #33507849
Бо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
AL_KIRgarbage collector - сборщик мусора, это когда программист не высвобождает память после использования - а отдает этот процесс на усмотрение garbage collector

и те и другие Sun и Microsoft - говорят что они у них круто работают

бытует мнение что программы на .Net - несколько быстрее.... а значит и garbage collector у Microsoft работает быстрее
что такое garbage collector я знаю
меня интересует конкретная реализация от Макросовта что и как
как у Явы он работает я примерно представляю
...
Рейтинг: 0 / 0
27.01.2006, 16:03
    #33507985
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Gluk (Kazan) AL_KIRбытует мнение что программы на .Net - несколько быстрее.... а значит и garbage collector у Microsoft работает быстрее

Гмм железная логика. Я бы сказал ЧУГУННАЯ. Уважаемый AL_KIR, а известна ли вам такая маааааленькая деталь как то, что .Net овский сборщик мусора включается никого не спросясь и на время своей работы приостанавливает ВСЕ потоки процесса. Даже те которые к .Net-у не имеют ни малейшего отношения ? В нашем проекте это оказалось настолько НЕУДОБНО, что всю .Net-овскую часть пришлось вынести в out-process COM-сервер :)

Вообще-то есть опция запуска его в background. Или я что-то путаю.... ))
...
Рейтинг: 0 / 0
27.01.2006, 18:58
    #33508441
AL_KIR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
про скорость .Net vs Java
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        Dim t0, t1 As Long
        t0 = Now.Ticks
        For I As Long =  1  To  100000000 
            Dim myString As String = "Hello World" & I
        Next I

        t1 = Now.Ticks
        Dim deltaT As Double
        deltaT = t1 - t0

        Debug.WriteLine("(" & t1 & "-" & t0 & ")/10000000=" & (deltaT /  10000000 ))

результат 64,1944961

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        long t0,t1;
        t0=System.currentTimeMillis();

        for(long myCnt =  0 ;myCnt <  100000000 ; myCnt++) {
            String myString ="Hello World"+myCnt;
        }

        t1=System.currentTimeMillis();
        double deltaT=t1-t0;
        System.out.println("in sec: "+(deltaT/ 1000 ));

результат 71.74

Вывод .Net и Java в этом простеньком тесет работают примерно одиноково,
все 100000000 объектов были успено уничтожены garbage collector

to Gluk (Kazan)
garbage collector - не включается а работает в паралельном потоке, чем больше объектов за которыми ему приходиться следить тем тяжелее его нагрузка, но можно принудительно остановить поток программы и вызвать garbage collector чтобы он собрал весь мусор. В .Net как я понимаю все объекты лежат в одной куче, garbage collector проверяет каждую ссылку у объекта который считает не используемым находит объекты по этим ссылкам и так далее... в результате выстраивает некое дерево неиспользуемых объектов, затем происходит пересортировка кучи - часть памяти высвобождается. В .Net существует возможность указать что такой-то объект проверять garbage collector не нужно, чем можно повысить производительность. Могу предположить, что в вашем проекте вы пытались реализовать некий буфер для чтения большого количества данных, и более чем уверен, что если бы вы писали тот код на Java - то получили бы точно такой же результат...
...
Рейтинг: 0 / 0
27.01.2006, 19:22
    #33508478
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Гамно, имхо, эти сборщики мусора. Не бейте только сильно. Я понимаю, что они нужны и сильно облегчают труд программера и всё такое. И когда я пишу на питоне, то автоматически использую гарбейдж коллектор...

Но вот только Борланд в дельфях, имхо опять таки, предложил идею лучше. Что за прибивание объектов должен отвечать обект родитель. Работает быстрее. Тоесть само собой обект породивший множество других объектов будет умирать долго и мучительно:) Но вот только он будет тормозить один раз, а коллектор жрёт время процессора постоянно.
...
Рейтинг: 0 / 0
28.01.2006, 09:59
    #33508763
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
2 Karakut

За меня уже ответили.

2 Sarin

Удаление ссылки GC это не аналогия delete указателя на область
памяти. Это тонкий и сложный механизм " выяснения потребности
в дальнейшем использовании ссылки
".

Вы ратуете за немедленное удаление ссылки обьектом родителем. Но
при этом вы совершенно не рассматриваете вопросы ссылочной
целостости. Вы предлагает логику сбора мусора вынести в
деструкторы каждого класса и свалить проблемы на разработчика.
А это не есть хорошо.

В дополнение. Можно ругать GC за медлительность и
несвоевременность работы, но я бы сказал, что его
использование оправдано. В некоторых языках и технологиях
(LISP-machine) которые возникли задолго до появления
.Net и Java без GC вообще нельзя обойтись.
И это не бантик, а концепция.
...
Рейтинг: 0 / 0
28.01.2006, 10:05
    #33508766
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
AL_KIRto Gluk (Kazan)
garbage collector - не включается а работает в паралельном потоке, чем больше объектов за которыми ему приходиться следить тем тяжелее его нагрузка, но можно принудительно остановить поток программы и вызвать garbage collector чтобы он собрал весь мусор. В .Net как я понимаю все объекты лежат в одной куче, garbage collector проверяет каждую ссылку у объекта который считает не используемым находит объекты по этим ссылкам и так далее... в результате выстраивает некое дерево неиспользуемых объектов, затем происходит пересортировка кучи - часть памяти высвобождается. В .Net существует возможность указать что такой-то объект проверять garbage collector не нужно, чем можно повысить производительность. Могу предположить, что в вашем проекте вы пытались реализовать некий буфер для чтения большого количества данных, и более чем уверен, что если бы вы писали тот код на Java - то получили бы точно такой же результат...

Я знаю как работают сборщики мусора. Проблема не в этом. .Net-ый код очень небольшая часть нашего проекта, написанная не нами, к которой мы вынуждены обращаться. А сборщик мусора, работающий разумеется в отдельном потоке, в полном соответсвии с документацией на время своих зачисток приостанавливает ВСЕ потоки в том числе и не имеющие отношения к .Net. В результате пачки потерянных запросов авторизации, возникающие с периодичностью запусков сборки мусора. После вынесения в out-process все тип топ. Собственно я уже описывал эту ситуацию в ветке C++ если склероз мне не изменяет.
...
Рейтинг: 0 / 0
28.01.2006, 13:47
    #33508881
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
mayton
Я не ратую за ручное убивание объектов. И пока ничего лучше GC не появится деваться нам некуда:)

Но, имхо, необходима новая, более логичная, концепция. Не нравится мне GC. Сама концепция выглядит как затычка, а не решение проблемы. Вот в COM, например, порождённый объект сам обязан вести учёт ссылок на него. И когда ссылок этих становится 0 должен сделать себе сипуху.

Вот придумать бы чтонибудь эдакое в виртуальных машинах.
...
Рейтинг: 0 / 0
28.01.2006, 15:52
    #33508948
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
В тему

Льюис Кэролл
- Поэтому здесь и накрыто к чаю? - спросила она.
- Да, - отвечал Болванщик со вздохом. - Здесь всегда пора пить чай. Мы
не успеваем даже посуду вымыть!
- И просто пересаживаетесь, да? - догадалась Алиса.
- Совершенно верно, - сказал Болванщик. - Выпьем чашку и пересядем к
следующей.
...
Рейтинг: 0 / 0
28.01.2006, 21:59
    #33509126
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
mayton
Вы ратуете за немедленное удаление ссылки обьектом родителем.
Совершенно не обязательно, кстати. Правильнее сказать "за оповещение родителем".

maytonНо при этом вы совершенно не рассматриваете вопросы ссылочной целостости.
Их незачем особо рассматривать - для них есть давние и проверенные решения.

Есть две симметричные проблемы - "ссылочной целостности" и "зомби, оставшегося висеть на ссылке". При работе в Java у меня регулярно болит голова на тему "все ли я сделал, чтобы эта хрень могла спокойно помереть". Лично я очень не люблю стиль работы, когда об одной и той же детали надо помнить в нескольких местах. С моей точки зрения идеальный класс сам, внутренними механизмами должен решать свои технические задачи. Инициализация, деинициализация и прочее - это техника.

Как удобный пример - давайте рассмотрим некое глобальное оповещение, на которое должнен отреагировать наш объект. Как это делается в JDK: в нашем классе делаем listener соответствующего типа, регистрируем его в объекте-оповещателе. В нашем классе делаем метод close(), выполняющий removeListener(). В пользователе нашего класса делаем метод close(), вызывающий наш close(). В пользователе пользователя нашего класса делаем метод close().... Если мы где-то ошибемся, цепочка оборвется. Если нам повезет, в результате образуется оторванная группа, которую GC таки прихлопнет; если нет - в результате куча объектов останется висеть до конца. Как правило, нам не везет (поскольку "глобальные" объекты имеют обыкновение быть сильно связанными). Если нам совсем не повезет, такой вот недоприхлопнутый объект вылезет в неожиданном месте (у меня так однажды была замечательная ошибка - я выполнял команду "aw detach", шел notification на refresh, и недоубитый объект выполнял команду, приводившую к "aw attach").

Как это делается в моей дельфовой программе - постараюсь описать терминами явы. Выполняется

Код: plaintext
1.
2.
3.
4.
5.
 class  MyObject  extends  AnyStandartObject {
   public  MyObject {
    ...
     new  Notification ( this , notificationSender) { ... }
  }

И собственно все. Теперь, если myObject уничтожается, он (автоматически, на уровне стандартного кода, спрятанного далеко в предках AnyStandartObject) дергает созданный экземпляр Notification; последний выполняет notificationSender.removeListener (this). Если уничтожается notificationSender, он также дергает notification, который внутри себя делает mNotificationSender = null. Наконец, если я захочу "до срока" прихлопнуть созданный notification, тот выполнит те же самые разрегистрации.

Ключевыми здесь мне представляются два фактора: во-первых, мне не нужно ни в одном месте программы за пределами этого new думать о созданном notification-е, во вторых, если я явно убиваю какой-либо объект, я могу быть практически уверен в том, что тот "мертв и уже никогда не оживет". Для Java мне пока что не удалось найти или сделать столь же удобную технологию.

maytonВы предлагает логику сбора мусора вынести в деструкторы каждого класса
Ровно наоборот. То, о чем говорил Sarin, как раз не требует никакой специальной поддержки в деструкторах пользовательских классов; все реализовано на уровне деструкторов базовых классов.

maytonи свалить проблемы на разработчика. А это не есть хорошо.
Хм. Дозвольте утверждение. Я работал в должностях типа "ведущий разработчик - руководитель проекта" в достаточно больших проектах на дельфе, на плюсах и на яве. Так вот, из проблем, так или иначе доходивших до меня (то есть возникавших у меня либо тех, с которыми просили помощи мои программисты) именно на java много выше процент "технических", не имеющих отношения к функциональности.

Разумеется, нельзя точно сравнить степень владения разными разработчиками разными инструментами. Но - либо именно в случае Java мне попались на редкость тупые разработчики, включая меня самого, либо таки проблем больше, чем выгоды. Другой вопрос - какая часть этих проблем обусловлена именно GC, а какая - другими, может быть неудачными аспектами инструмента; тут уже не готов уверенно утверждать.

maytonВ некоторых языках и технологиях (LISP-machine) которые возникли задолго до появления .Net и Java без GC вообще нельзя обойтись. И это не бантик, а концепция.
GC, безусловно, концепция.

Простите, а насчет необходимости gc в Лиспе - насколько авторитетное утверждение? Я нисколько не оспариваю уместность там GC, но по моей прикидке для Лисп-машины таки возможна реализация без GC, пусть несколько извратная.
...
Рейтинг: 0 / 0
31.01.2006, 07:16
    #33512251
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.NET (+ и -)
Что-ж, коллеги. Вижу.. проблема имеет резонанс.

MS и SUN всего-лишь предлагают общий и единообразный подход
к решению проблемы сборки мусора. Понятное дело... общее
решение не всегда удовлетворяет конкретным нуждам.
Например, меня-бы порадовали дополнительные ключевые
слова, или директивы компиллятора которые-бы подсказывали
GC, как следует поступать со ссылкой при потере области
видимости
, разрешать или запрещать реплицирование ссылки,
как разрешать циклические ссылки и т.п.

Я не идеализирую GC, однако на безрыбье, как говортся
и рак - рыба. Пока еще я не встречал промышленных библиотек
умных указателей достойных внимания. Так... частные случаи.

2 Softwarer

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

На ваш вопрос по LISP-машине я обязательно отвечу. Самому
интересно.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / .NET (+ и -) / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]