Как стать автором
Обновить

Комментарии 40

Да ладно, число Пи вообще можно округлить до 3-х и не считать=)
В каком-то американском штате это даже официально узаконено.
Дело не в числе Пи, а в подходе к разработке и «прогрессе». Простые задачи, зачастую, решаются через пятую точку. Работа с БД в Шарпах тому пример. Последней каплей стала подгрузка библиотеки во флеше ради 1 функции в 6 строк.
НЛО прилетело и опубликовало эту надпись здесь
Пустой проект для работы с БД + 2 поля ввода + 1кнопка. На винте 15 метров.
НЛО прилетело и опубликовало эту надпись здесь
.net под процесс выделяет в зависимости от машины примерно до 10 мегабайт. Это сделано не просто так, а для оптимизации производительности. И согласитесь, 10 мегабайт памяти уже не столь большое количество, когда на борту обычного компьютера бывает 1, 2, 4 и более гигабайт.
Думаю, что основной объем занимают метаданные, которые обеспечивают вкусности типа IntelliSense. Никто вам не мешает по-отключать их. И вообще можно ведь писать в блокноте и компилить из командной строки — вот только захочется ли вам так программировать?
Для простых задач так и надо делать. Хотя выше я привёл пример, когда оптимизация отключением метаданных не возможна. Это работа с БД в C#. Сам алгоритм весьма крив, памяти много ест, много промежуточный действий. И всё ради того, чтобы получить пару строк данных. А прямой зарос написать нельзя. Неположено т.к. небезопасно.
Работа с БД в C# — слишком размытая формулировка. Что используете? ADO.Net Datasets? LINQ2SQL? EntityFramework?
И почему это нельзя прямой запрос написать?
private static void ReadOrderData(string connectionString)
{
    string queryString =
        "SELECT OrderID, CustomerID FROM dbo.Orders;";

    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        SqlCommand command =
            new SqlCommand(queryString, connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        // Call Read before accessing data.
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}",
                reader[0], reader[1]));
        }

        // Call Close when done reading.
        reader.Close();
    }
}

Чем вам такой способ не угодил? Он у вас 15 мегабайт будет есть?
msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx — код отсюда.
Разобрались бы с предметом, прежде чем писать голословные утверждения.
Мы с другом писали его дипломник на шарпах на ВМиК. Это раз.
Второе: Опишите БД, опишите коннектор (Ага, вот и начнётся веселье), опишите форму работы (ну хоть что-то она должна выводить и куда-то), взвести после этого работающий проект, который с локалхоста mssql2000 из любой базы запрашивает строку и выводит её на экран. После этого взвесте папку проекта. После взвешивания запустите приложение и посмотрите, сколько оперативной памяти оно потребит. А после этого уже тыкайте в лицо классом, которому для работы нужно проделать очень много работы.
ууу это на вмике теперь так плохо готовят?
1) «Опишите БД, опишите коннектор»
это что такое? где описать бд? коннектор — это SqlConnection — конекшен стринг большой что ли?
2) «взвесте папку проекта»
это с бинами/кэшем интелесенса и дебаг информацией?
3) «запустите приложение и посмотрите, сколько оперативной памяти оно потребит»
ну посмотрели, на машине с 512мб она съест одну величину, с гигом другую, а с двумя вообще обнаглеет. учите мат часть ей богу — в менеджет среде вообще нельзя каким либо образом замерить общее потребления памяти для приложения (текущий снэпшот даст только приблизительное предстваление) — и в яве и в дот фреймворке приложение при старте отожрет столько сколько ей нужно ествественно в рамках доступной памяти.

«тыкайте в лицо классом, которому для работы нужно проделать очень много работы»
простите, ничего не понял. почитайте все же рихтера что ли для начала, а потом уже лезьте чушь пороть.
Сверху кусок кода. Не более. Прежде чем, как вы выразились, пороть чушь, будте добры написать программу на шарпах и запустить её. После этого взвесть пусть уже экзешник. И посмотреть сколько готовый проект будет потреблять оперативной памяти. И сравнить сложность задачи с ресурсами, затраченными на её выполнение.
А про потребление оперативной памяти — в независимость от общего количества доступной памяти приложение будет потреблять столько, сколько ему надо. Единственное отличие может быть в том, что часть данных будет хранится в виртуальной памяти. Но сумма при этом мало поменяется.
НЛО прилетело и опубликовало эту надпись здесь
что написать? не осилите это в Main обернуть и sql connection подсунуть? кусок кода, если б вы знали предмет, является полностью законченным и самодостаточным (за исключением той самой Main и connection строки).
ну, ладно, вот вам код — сделайте солюшен 3.5 и вставьте:
using System;
using System.Data.SqlClient;

namespace SqlConsoleReader
{
internal class Program
{
private static void Main(string[] args)
{
ReadOrderData(«Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI»);
}

private static void ReadOrderData(string connectionString)
{
string queryString =
«SELECT OrderID, CustomerID FROM dbo.Orders;»;

using (var connection = new SqlConnection(connectionString))
{
var command = new SqlCommand(queryString, connection);
connection.Open();

SqlDataReader reader = command.ExecuteReader();

// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}

// Call Close when done reading.
reader.Close();
}
}
}
}
простите что уж форматирование сбилось, не доступны мне тэги, увы.

весит это чудо в Release 5,120 bytes. ест на машине с 8 гигами памяти 10 метров — но это совершенно не показатель.

конечно, если у вас машинка P133mhz и памяти 32mb то да, стоит разговаривать как это современные программы жрут памяти то.

нескромный вопрос — у вас бзык просто по отношению к менеджет коду или вообще?
Тогда 512Кб памяти было не много, но ощутимо. Сейчас 20Мб это мелочи. Но дело даже не в этом. Платофрмы вроде .NET создавались совсем для других задач. Меньшая производительность компенсируется значительным упрощением разработки. Если требуется меньший расход памяти и/или большая производительность, для этого стоит применять другие средства, хотя и VS подойдет, если использовать неуправляемый С++ и особые параметры сборки проекта.
Вы это понимаете. Однако вы не будете подгружать библиотеку ради 1 — 2 функций только потому что лениво писать их руками (Именно лениво, а не трудно) или скопировать их код. А многие, кто считает себя тру-программерами, как раз подгрузят библиотеку. И к сожаленью, это тенденция прослеживается даже у крупных разработчиков ПО.
Зачем изобретать велосипед, если лучше уже не сделаешь? Может, вы и GUI делаете через winapi или напрямую через xlib?
да ладно, сам видел в html-шаблоне подключался полный jquery для того, что-бы скрыть/показать блок по ссылке. Хотя на JS это делается несколькими строчками. Вот вам и подход к программированию.
Я про таких тру-прогеров и говорю
НЛО прилетело и опубликовало эту надпись здесь
Я шарпы для таких задач не использую. Мне вообще мало что нужно из средств разработки под винду.
НЛО прилетело и опубликовало эту надпись здесь
Вы знаете, топик был написан после конкретного случая. Шарпы под руку попались как пример нерационального использования ресурсов системы для достижения относительно простой цели (или промежуточный целей). Число Пи — просто нравится относительно простой рекурсивный способ вычисления с хорошо оцениваемой сложность. А то, что я шарпами «на Вы» и не особо жаждю лезть в программирование под винду — факт. Что люди, о которых я писал, подгружают библиотеки ради 1 функции — тоже факт.
Многие считают себя программистами только потому что пишут под винду в Студии не заботясь о качестве когда — факт. Что ведущие разработчики планеты используют при разработке ОС язык очень высокого уровня — тоже факт.
И что если бы многие подходили к программированию не как к достижению цели любыми средствами, а как к балансу между затратами и результатом, то программы работали бы быстрее и стабильнее.
Ну если человек вообще не знает JS, но увидел пример того, что ему необходимо в данный момент — предлагаете изучить язык и не использовать готовое, что уже перед глазами?
дело не в этом, а в том, что «мода» на готовые наборы решений (библиотеки/фреймворки) отучает думать и искать более оптимизированные варианты. Как front-end разработчик сплошь и рядом в интернете вижу, что по любому поводу все хватаются за jquery (mootools/ExtJS на вкус), даже когда решение задачи это несколько строк на «чистом» JS.

Банальная раскраска таблицы «в зебру» требует меньше 10 строк на js. Но ведь «правильные» разработчики подключат фреймворк, найдут к нему еще плагин и эти 10 строк напишут уже с помощью фреймворка.
да, только когда вам еще что-то нужно будет добавить, напишите еще пару функций, а потом еще… а потом судоржно переводить все на фреймворк, потому что куча того, что надо сделать превышает разумное. в чем проблема фреймворка? вам надо хвастать — я мол каждую строку сам написал, ни одногог… го фреймворка или же решить задачу, зачастую стандартным и понятным всем способом?
Чаще не нужно бывает. А вообще это уже задача предварительного планирования — будет ли развиваться проект и в каком направлении. Я за использование фрейморка там, где он действительно будет востребован большей своей частью, а не одной единственной функцией, в описании которой без фреймворка будет в сотни раз меньше кода.
Никто так же не мешает НЕ пользоваться подобными средствами.
Например:

Вебсервер AppWeb для встраиваемых систем, полнофункциональный, с вкусностями типа модулей (можно PHP прикрутить) и EJS (embedded javascript — для серверной генерации страниц).

Чистый С++ без стандартной библиотеки: 500 кб бинарик.
Чистый С++ со стандартной библиотекой: 300 кб бинарик + 2 метра стандартная библиотека

В первом случае часть необходимых функций реализована в составе сервера, экономим на библиотеке,
а во втором случае, если библиотека и так в составе системы, не изобретается велосипед.

Проект пользуется популярностью и программистов никто не заставляет использовать фреймворк .NET
Я не говорю про то, что нет средств. Я говорю про тенденцию. Скорость разработки растёт, а вот качество кода падает. Про оптимизацию вычислений сейчас вообще мало кто задумывается. А понятие сложность алгоритма вообще не попадает в мозг большенства прогеров.
Какая разница сейчас, 20 итераций или 2000? Всё равно отдельно вычисления происходят быстро, памяти у юзера много (А если вспомнить про виртуальную, так и вообще немерено), процессор с 2-мя ядрами. Ничего, поделает в 100 раз больше работы, зато я сдам программу на 1 день( неделю, месяц) раньше.
«Я говорю про тенденцию»
Если вы не можете выбрать адекватный задаче инструмент — это ваша тенденция, а не кого-то или чего-то ещё.
неправильно так рассуждать.
есть большие области разработок где алгоритмов и нет в помине. гораздо легче сказать где они есть: гейм дев, анализ чего либо. Не так много областей. А вот остальные области только и выигрывают от того, что об оптимизации и не задумываются (в разумных предел, естественно). в крупных системах и проектах гораздо проще и главное надежнее и стабильнее купить новый сервер чем лезть курочить какой то core код который — не факт что станет быстрее, и не факт это тот самый bottleneck и не найдутся другие.

скорость разработки так же растет вместе с количеством функций, которое выполняет приложение. Это в том мохнатых 80х можно было написать консольный квест и радоваться, что удалось впихнуть его в 4кб. сейчас количество функций, требуемых от приложение несоизмеримо больше чем в прошлом и если принимать схожие подходы (гонятся за каждым байтом), то текущий софт выпускался бы лет 10.
Причем тут тенденции, просто чтобы выкопать ямку в песочницы не стоит использовать экскаватор и целую строительную бригаду, не понимаю кто вам мешает использовать более простые вещи?
Да, я вот лично не помню, чтоб видел таких программистов, однако почему-то программ, которые весьма необоснованно жрут кучу ресурсов — ну очень много.

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

Но бывает и ещё хуже! Всё мы, наверное, знаем такой бренд «ZyXEL». Вот у меня в ноуте PCMCIA карта WiFi. И в винде служба от неё. И начал я зхамечать, что своп у меня растёт как-то непомерно. Смотрю, кто его схавал — никто. Убиваю процессы по одному, убил эту службу (которая, если верить таск менеджеру, сожрала совсем чуть-чуть) и освобождается гигабайт свопа.
«А ещё очки один, интеллегент!» (с)
Я не понимаю, чему вы возмущаетесь. Студия заточена для написания крупных, расширяемых, требовательных к безопасности проектов. Но даже в этом случае остается возможность написать неуправляемый код на С++ и подключить туда, куда надо. Пользуйтесь ей. Или вам уже лень брать в руки мотыгу, когда в гараже стоит трактор?
Это все капитализм. Не выгодно писать дольше и качественнее. Прогу которая жрет 1Мб памяти вместо 10Мб не продашь в 10 раз дороже. Большинство пользователей не будут платить в два раза больше за программу которая работает 10с а не 20. Оптимизация в большинстве случаев не выгодна.
А если подключить серых человечков, то можно зайти еще дальше. Громоздкие и тормозные проги стимулируют покупку новых процессоров, а это тоже прибыль.
Автор, берете Ассемблер в руки и ваша программа будет требовать 512 кб оперативы. Только не надо говорить что ассемблер умер.
Не много ли? :)
20 лет назад 512 килобайт было относительно больше чем сейчас 20 мегабайт.
программист при написании программы с библиотекой сэкономит больше времени, чем потратит компьютер при загрузке в память и обработки этих 20 мегабайт.
Не буду отзывать о тенденциях, но лучше бы вы вашего «товарища» чему-нибудь научили, чем жаловаться тут :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории