Это копия, сохраненная 30 января 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Шапка: https://github.com/CSharpShapka/SharpHat/wiki
(пока просто перенесена шапка из ОП-поста, в ближайшее время приведу к более-менее адекватному виду, не стесняйтесь слать свои пулл-реквесты)
Прошлый тред тонет здесь: https://2ch.hk/pr/res/869105.html (М)
перед собесом спрашиваешь: куда и на что тебя собеседуют. ну а дальше 60/40, что наебут
Делаю все как обычно, последовательно по одной картинке за раз (распараллелить тут нельзя, ибо манипуляции с каждой следующей картинкой зависят от предыдущей + рандом):
Width = bitmap.Width;
Height = bitmap.Height;
Bits = BitmapToByteArray(bitmap);
BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned);
Bitmap = new Bitmap(Width, Height, Width * 4, PixelFormat.Format32bppArgb, BitsHandle.AddrOfPinnedObject());
Далее произвожу нужные мне манипуляции с Bits, делаю Bitmap.Save, и после сохранения освобождаю GCHandle и все ресурсы.
Но возникает проблема - программа правильно обрабатывает и сохраняет примерно первые 3-5 тысяч картинок, и после этого на рандомной картинке на Bitmap.Save выдает мне "AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена". Все картинки имеют одинаковые параметры (размер, формат, битность).
Аноны, подскажите, куда копать? В каком месте память повреждается? И как она вообще может повредиться, если я выполняю все последовательно, и освобождаю все ресурсы строго после того, как они перестают использоваться? Тем более, все это делается даже без unsafe.
действительно ли тебе тут нужен gchandle, или проще воспользоваться блоком using для bitmap?
выполняешь ли ты все дела с картинкой в unsafe блоке?
Вот этого удвою. Если уж совсем параноик, можешь явно прописать на Bitmap'е диспоуз.
Прямо с детства мечтал стать ниибаца кодером, как-то с годами забыл, но вот недавно пыл вернулся, на этот раз цель себе поставил четко. Свободного времени в день 2-3 часа +/-. Хочу это время полностью посвящать шарпу.
Интересует разработка софта для соц.сетей, всякие боты и т.д., многопоточность, брут, ну и прочая хуйня.
Знаний самую малость, но не полный 0.
Так вот, очень прошу вас дать мне дельные видео уроки, книжки и т.д., дабы я их полностью переварил и начал потихоньку сам, свободно кодить, без копи-пасты чужих кодов.
Алсо, пытался смотреть ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня сильно поимели мой мозг.
Коротко говоря, нужны годные видео уроки и книжки, где доступным языком научат потихоньку самостоятельному кодингу.
Заранее благодарен тебе анон!
Здравствуйте дамы и господа!
Прямо с детства мечтал стать ниибаца кодером, как-то с годами забыл, но вот недавно пыл вернулся, на этот раз цель себе поставил четко. Свободного времени в день 2-3 часа +/-. Хочу это время полностью посвящать шарпу.
Интересует разработка софта для соц.сетей, всякие боты и т.д., многопоточность, брут, ну и прочая хуйня, короче, вполную использовать API и т.д.
Знаний самую малость, но не полный 0.
Так вот, очень прошу вас дать мне дельные видео уроки, книжки и т.д., дабы я их полностью переварил и начал потихоньку сам, свободно кодить, без копи-пасты чужих кодов.
Алсо, пытался смотреть ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня сильно поимели мой мозг.
Коротко говоря, нужны годные видео уроки и книжки, где доступным языком научат потихоньку самостоятельному кодингу.
> видео уроки
Учить программирование по видеоурокам - то же самое, что и просить других людей пережевать еду за тебя, чтоб ты потом мог только проглотить.
> книжки
На русском всё устаревшее, на английском годная литература в основном только за бабло.
Всё это хуйня, ты так ничему не научишься. Просто ставишь себе задачу "написать такое-то приложение", гугл в зубы - и вперёд, по пути всему, что потребуется, научишься.
И да, вот этот >>887277 господин полностью прав - либо учишься искать нужную инфу сам, либо нахуй путешествуй отсюда.
Двачую. Я сам начинал с C/C++. Си учил по Ричи, а кресты по Страусу. Плюс гуглил если что-то не понятно. Дальше все языки без книг учу и видео. Там слишком для начинающих объясняют. Не хочу каждый раз проходить переменные снова. Лучше так как ты сказал, Google+MSDN+SO и пилишь проект.
Это просто пиздецки сложно. На пике все слова, которые тебе нужно гуглить.
для совместимости с языками программирования без статической типизации. ну либо в случае, когда структура объекта может быть настолько разной, что аж плохо становится
Если умеешь в Си, начни с албахари. Идёт как справочник по возможностям языка и потом юзкейсы. Мне после контроллеров заходит самое оно.
Вот у меня есть самописный редактор уровней для самописной игры. Есть инструменты - кисть, ластик, селектор для работы со свойствами конкретного блока и создания связей, етц. Каждый такой инструмент - синглтон, наследующий интерфейс ITool. Я хочу каждый такой инструмент сделать дллькой, чтобы в коде это выглядело как-то так:
foreach (var tool in toolDir.GetFiles(*.dll))
Tools.Add(tool.Name, tool);
Мне нужно узнать собственно про импорт и детали создания. Если просто создать новую библиотеку классов, сунуть туда все связанные интерфейсы и код из текущих классов, это будет правильно?
> На первый взгляд, выглядит правдоподобно
Это только на первый взгляд, на самом деле MEF - хуита лютая. Я хотел использовать в своем проекте, но, почитав доки и посмотрев примеры кода, решил, что нахуй это всё. Ограничился подгрузкой модуля через Reflection, куда быстрее и проще.
Как можно не понимать один из самых простых языков программирования? Синтаксис самый что ни на есть классический, без новомодных выебонов. Каких-то подводных камней, на которых может споткнуться начинающий - нету. Возможностей во фреймворке куча на все случаи жизни, а если чего-то нет, то для этого наверняка есть сторонняя либа. Шарп - наверное лучший язык для вхождения в программирование, а ты его не понимаешь. Странно как-то.
руби-хуюби?
>>887955
охуеть, сравнивать .net и 1с
https://ru.wikipedia.org/wiki/Сравнение_C_Sharp_и_Java
так, небось, пидары как всегда наобещают, а потом повводють один синтаксический сахар
> Что почитать про юнит тесты, чтобы научиться их писать? Много раз слышал, но сам не пользовался.
Просто про юниттесты - книга roy osherove unit tests чегототам, в целом дает норм представление и многие моменты разъясняет.
Толковый справочник xunit test patterns
По мне, юнит тесты дают максимум выхлопа при tdd.
Мой путь был таков:
Unit tests for fridy cats like me на pluralsight
Еще пачка видосов от туда по этой теме, вплоть до курса марка симана
Книжка growing object oriented software guided by tests - вот после нее все встало на свои места и теперь мне без test first жизнь не мила.
>а потом повводють один синтаксический сахар
А они же вроде ничего кроме сахара и не обещали (паттерн матчин там будет примитивный)
Это вот так все и будет продолжаться? Когда начнется интересная часть? Про многопоточность могу не мечтать?
Точи навыки в попенсорсе, есть множество проектов на .Net где требуются люди с опытом и горящими глазами делать что-то интересное.
>>887268
В общем, хотел расписывать ответы на вопросы, но таки нашел решение.
Прежде всего напишу, что я не программер, никогда на него не учился, и это всё - чистое хобби. Так что возможно я просто не учёл какую-то особенность языка.
Сначала скажу, что я использовал не Bitmap, а класс-обертку (DABitmap) над ним, которая позволяет доступ к пикселям напрямую - получается доступ к массиву каналов без unsafe кода, LockBits, Marshal.Copy и прочей ненужной шелухи, при этом со скоростью того самого LockBits. Написал свои методы GetPixel и SetPixel, работаю с ними.
Для обработки картинки я сделал функцию ProcessBitmap, которая изначально принимала и возвращала DABitmap, затем в вызывающем коде уже выполнялся Bitmap.Save. Всё работало прекрасно, однако прога стала сжирать память в больших количествах. На маленьких наборах картинок ещё всё отрабатывало, а на полном массиве, по моим подсчетам, ей понадобилось бы около 20 гигов оперативки. Я прогнал профайлером и обнаружил, что по какой-то причине те самые одномерные массивы каналов после использования продолжали оставаться в памяти, по ~2 мб на картинку. Я решил изменить функцию так, чтобы она принимала исходный DABitmap, и через ref обычный битмап, в который нужно возвратить результат. Прописал возвращение через Bitmap.Clone, затем вручную Dispose на используемые ресурсы. Пожирание памяти прекратилось, но стала выплывать проблема из >>887209. В итоге я решил ради теста не возвращать битмап, а сохранять его непосредственно из ProcessBitmap (вместо Clone), прямо перед диспозом. И, о чудо, всё вдруг заработало прекрасно. Я прогнал ради теста раз 20 на разных наборах картинок, ошибка перестала появляться.
Такие дела. Но мне всё же непонятно, почему вылетала та ошибка. Явно каким-то образом мой склонированный битмап исчезал из памяти раньше, чем успевал сработать Save, но как такое возможно?
Как руководители определяют, на какой инфраструктуре сидеть? В 1с все шаблоны отчётиков готовы и бух функции написаны. Так чем шарп для предприятия лучше? (Как доказать работодателю, что оставаясь на шарпе, мы сможем большее? В чём наше конкурентное преимущество?)
Или иначе задам вопрос, каким компаниям выгоднее .net а каким 1c?
тут вопрос не в том, что шарп лучше для бухучета или наоборот, а что это сравнение не совсем правильное: как теплое и мягкое
>>888162
и даже свитч-кейз для типов будет оберткой над if (obj is Type) { (Type)obj. } ?
нупиздец
Ну им же легче компилятор дописать, чем саму clr чтобы она понимала твой паттерн матчинг. Зато работать будет без обновлений фреймворка
Многопоточность?
Ну попробуй редактировать и удалять одну и ту же сущность в паралели - если всё ёбнется - чини. Узнаешь про потоки
Подмогите, аноны. Обращался в прошлом треде, уже больше понимания, но остались еще вопросы.
Дали курсовой по .net сделать интернет магазин.
То, что должно быть в проекте обязательно:
N-tier
asp MVC
autofac
EF CodeFirst
Должно быть 4 слоя:
1) Репозиторий
2) Домен
3) Сервисы
4) MVC
Я все правильно понимаю или нет?
Буду искренне благодарен!
Я сам джун, но всё-таки отвечу.
Делай три слоя:
Domain
DAL
Web
В Domain лежат сущности, сервисы и интерфейсы репозиториев. Этот слой ни от кого не зависит. Здесь реализуется только бизнес-логика.
-----
DAL - реализует интерфейсы репозиториев из Domain. Соответственно, от него же он и зависит. То, что ты пишешь реализации интерфейсов в отдельной сборке позволяет тебе полностью абстрагироваться от способа хранения данных, у этого есть свои плюсы:
1. Ты не думаешь понятиями EF или других механизмов хранения данных, когда пишешь Domain-слой
2. Ты можешь писать юнит-тесты для Domain-слоя, делая заглушки для репозиториев
3. Если приспичит, то можно без особой боли отказаться от EF (хотя хуй знает, зачем)
Отдельно стоит сказать, что в DAL слое у тебя, скорее всего, будут лежать дубликаты всех сущностей в виде DTO. Причина этого в том, что в Domain слое ты, по хорошему, убираешь часть сеттеров (например, у пользователя нельзя поменять id после создания). EF пошлёт тебя нахуй, если ты попытаешься создать сущность с отсутствующим сеттером и без конструктора по умолчанию (который без параметров). Поэтому тебе нужно будет маппить доменные сущности к DTO и обратно. Чтобы не писать тучу однотипного кода, есть готовые либы, можешь погуглить. Алсо, в этих DTO ты можешь использовать аннотации для описания схемы бд, типа [StringLength(200)]. Все эти DTO можешь пометить модификатором internal, поскольку кроме DAL-слоя о них никто не знает.
-----
Web, соответственно, зависит от двух верхних слоёв и делегирует исполнение бизнес-голики доменным сервисам. В контроллерах не должно быть никакой бизнес-логики. Только валидация, преобразования сущностей в DTO (например, тебе нужно в результате отдать данные пользователя в виде JSON, но ты не хочешь отправлять его пароль) и отправка результатов на выход.
Ахуеть, я на курсовых только формошлёпством занимался. Удачи тебе.
Вроде все так. Только учти, что нижние слои не должны знать о верхних, что-то типо такого:
Domain <- Repo <- Service <- Web
т.е. доменка не связана ни с чем, репозитории знают только о доменке и т.д.
Спасибо, я еще до конца не разобрался, но разве не с помощью IoC контейнеров реализуются интерфейсы репозиториев?
Зависимость для контейнеров прописывается на уровне web-приложения как раз.
>>888426
Что тебе мешает вызывать хранимые процедуры из EF? Да и не все же ты на хранимках будешь делать. Где-то достаточно простого запроса с использоваие linq и EF, если даных не много. Зачастую мне кажется EF в тырпрайсе только по историческим причинам существует - когда-то запилили, ибо самый удобный инструмент был, а микро-orm небыли на слуху и не пользовались популярностей.
IoC контейнер всего лишь управляет зависимостями. Например, у тебя есть сервис, который зависит от объекта типа IUserRepository. Ты хочешь скормить ему реализацию в виде UserRepository. При этом UserRepository лежит в другой сборке и напрямую ты от него не зависишь.
Для этого тебе нужно настроить твой IoC-контейнер. Ты пишешь либо в DAL, либо в Web-слое что-то рода:
Bind<IUserRepository>().To<UserRepository>();
Всё. Теперь любой, кому понадобится реализациия IUserRepository, сможет её получить. Автомагия IoC-контейнера подставит репозиторий в конструктор для твоего сервиса.
там где достаточно простого запроса, селекта через ADO хватает. Про энторпрайз - я имел в виду, что EF там нет. (Ориентируюсь на SharePoint).
Через ado пиздец неудобно работать - linq куда красивее и проще.
Джуном без опыта устроиться непросто. Сейчас джунов как говна, а позиций не так уж много. Легче мидла одного нанять чем несколько джунов.
> Прописал возвращение через Bitmap.Clone
Наверное из-за этого ошибка была:
It is the common difference between a "deep" and a "shallow" copy, also an issue with the almost-deprecated IClonable interface. The Clone() method creates a new Bitmap object but the pixel data is shared with the original bitmap object. The Bitmap(Image) constructor also creates a new Bitmap object but one that has its own copy of the pixel data.
Using Clone() is very rarely useful. Lots of questions about it at SO where the programmer hopes that Clone() avoids the typical trouble with bitmaps, the lock on the file from which it was loaded. It doesn't. Only use Clone() when you pass a reference to code that disposes the bitmap and you don't want to lose the object.
> На русском всё устаревшее, на английском годная литература в основном только за бабло.
Все основные книги по шарпу из шапки переведенына русек, даже если не последнее издание ничего страшного в этом нету.
> Просто ставишь себе задачу "написать такое-то приложение", гугл в зубы - и вперёд, по пути всему, что потребуется, научишься.
Знал я таких хуесосов, которые хвастаются своими еба проектами которые написали с помощью гугла и SO, но при этом даже не знают для чего используется ключевое слово static. Так что книги нужно будет осилить в любом случае для более глубокого понимания предмета.
инфраструктура EF дает возможность писать те участки кода, которые зависят от обновления БД, но писать триггеры, самому высматривать что удалилось/изменилось/добавилось, возможность отсутствует
> ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня
Там что, умные вещи рассказывают? Посмотреть что-ли.
> pixel data is shared with the original bitmap object
Боже мой, ну вот нахуя они это сделали? Ещё и нигде про это не написано. От функции с именем Clone ждёшь совсем другого поведения.
ну тошо копировать пару мегабайт данных это вам не это. достаточно много всякого в BCL неочевидно в угоду производительности
массив - это тоже коллекция, так-то
> для повседневных нужд
> особенно специфичные их типы
охуенная логика
хэшсеты, стэки и прочее используются там, где нужны хэшсеты, стэки и прочее. для того, чтобы загнать некое множества данных от одного места в другое, обычно используют T[]/List, прикрывая все это IEnumerable. изредка появляется необходимость использовать нечто вроде IList, IReadOnlyCollection. в качестве коллекции, которую можно дополнить/урезать - соответственно List/Collection
Я нюфаня, но твой посыл примерно понял. Буду решать задачи с использованием всех возможных типов, по необходимости.
Какие варианты еще есть?
> выдает его только охуительным разработчикам
это чо значит? типа надо купить/подписаться?
парсить страницы
Типа надо быть разработчиком с идеей охуительного приложения и готового шаблона, дабы предоставить этим пидоразам на проверку, а далее получить доступ.
Благодарствую за ответ.
Но нет ли другого способа? Уточню пожалуй, что речь о instagram-е. Все же акцент хотелось бы сделать на эмуляцию действий с мобильного приложения, а не через их веб-калеку.
хех, ну как вариант найти способ спарсить реквесты/респонзы инстаапп своего мобильника
Еще раз благодарствую и посылаю нахуй эту идею, знания не дотягивают, увы...
Возможно вернусь через пару лет к этой идее.
Кстати, меня в целом интересует всякого рода спам и т.д.
Есть ли где-нибудь охуительная обучалка по POST/GET?
не уверен, что понял вопрос. пост/гет - это протокол HTTP, REST-сервисы и вся эта затея
Да, я и говорил о HTTPS запросах. Т.к. API мне не получить, а вся эта ебля с телефоном не для моего уровня, то можно для начала хотя бы попробовать реализовать через калека-браузерную версию.
ну HTTPS - это HTTP + шифрование на уровне клиента
самое сложное (как мне кажется) - это как раз с телефона декодировать что/куда/кому направляется т.к. тебе понадобится сертификат которого у тебя нет. либо колдовать над wireshark и ему подобными. но я тебе тут вообще подсказать ничего не могу
благо, у браузеров есть Console/Network, где вся эта херня проходит без проблем. тут встанет вопрос, применим ли браузерный API к кему-нибудь, или придется парсить хтмл
А как насчет этого?
Могу я попросить тебя пробежаться глазами мельком?
Только сейчас нашел.
https://github.com/mgp25/Instagram-API
судя по всему - это как раз и есть имитация тыкания пользователем кнопочек в браузере. только мне сложно понять как оно распознает ответ сервера (ибо рнр), но не думаю, что там что-то революционно уникальное
Для начала нужно переписать код с PHP на C#.
Сколько примерно будет стоить такой заказ? Т.к. в PHP у меня знания только на базовом уровне, на начально-базовом.
оче дораха, делай форк и развивай свои скилы на си решётке.
Ладно, проехали, ты и так мне помог аноняша.
Накидай годных гайдов и т.д., дабы усилить свои знания именно для таких целей, разработка софтов онли для соцсетей и т.д.
Какие-то определенные библиотеки может изучать, ну или пути, ну и т.д. Просто недавно только подсел на C#, общее понятие о программирование есть, лет 5 назад сутками напролет кодил, сейчас решил вернуться, только вот всю эту хуйню подзабыл, да и сейчас нужны знания онли для такого рода целей, спам и прочая хуйня в соц.сетях.
Тереби профильные форумы на технологии -> ищи аналоги на C#
Не первый раз встречаю мнение, что МС забросили WPF. Насколько это правда?
это неправда как и то, что ms забросили winforms. конечно, не сказать, что это приоритетная разработка или хотя бы где-то в топах, но тем не менее
АХаха, как ловко ты попытался меня подловить. Прям как в школе в молодости. Я никакой не пидор.))))
В плане хобби\кучи свободного времени на работе изучаю .NET
Хочу в итоге написать небольшое картографическое приложение для себя. Начал курить варианты настольных приложений - Windows Form, XAML. У меня вопрос, возможно некорректно поставленный, на какой технологии создано родное приложение "Карты"? В частности как реализованы вкладки и вот такого плана меню, как на скрине? Если можно подробней, материал по теме я сам найду. Вообще в чем имеет смысл из современных технологий приложений для десктопа разбираться?
>на какой технологии создано родное приложение "Карты"?
UWP или WinRT, зависит от версии Windows.
Это UWP
Windows 10
>В частности как реализованы вкладки и вот такого плана меню, как на скрине?
Не понимаю твою огромную желтую мазню. Могу попробовать ответить если ты разобьешь это на несколько отдельных вопросов с отдельными картинками.
Странное сравнение. Это ж разные программные платформы(UWP = mobile в котором возможности обрезаны ради безопасности end user'a, WPF = необрезанный .NET 4.6.*,).
Как в окне приложения реализованы вкладки?
В данном случае результат поиска "пик 1" отображается в новой вкладке "пик 2" + открывается информационная панель со списком объектов около этого адреса с возможностью ее свернуть либо перейти к информации о конкретном объекте "пик 3".
Мне интересно на основе какой технологии в приложении я могу реализовать возможность открытия и работы в нескольких вкладках (в идеале конечно еще возможность вкладку выводить в отдельное окно, как в Edge например), а также реализовать подобные скрывающиеся меню.
1 это не вкладки, а просто список(с горизонтальной ориентацией разве что, больше в нем ничего необычного не вижу).
2 это контейнер(какой-нибудь Grid или StackPanel) содержимое которого через binding привязано к выбранному элементу списка 1. Насчет того что он заменяет поиск: либо это просто 2 контрола размещены в одном месте и у них переключается видимость, либо сложный кастомный UI контрол с разными состояниями.
Забыл еще кое-что, вся верхняя панель это AppBar.
Спасибо
Интерфейс реализован на XAML? Тк это UWP приложение, то соответственно Windows Runtime XAML?
Да, ты правильно понял.
есть необходимость подсчитать в коллекции кол-во элементов, удовлетворяющих условию. Как лучше всего сделать, через массив + счётчик или использовать метод Count от LINQ? Как вообще оценить нужность того или иного подхода?
Это зависит от того, что тебе нужно. Функциональный стиль делает твой код более коротким, понятным и не оставляет шансов обосраться.
Сравни:
int goodItemsCount = yourCollection.Count(x => x.SomeField == 42);
С этим:
int goodItemsCount;
for(int i = 0; i < yourCollection.Length; i++)
if(yourCollection.SomeField == 42)
goodItemsCount++;
Однако, за всё хорошее нужно платить. В конечном счёте, это влияет на производительность. Использование LINQ будет менее производительным, в сравнении с простым массивов и циклом со счётчиком.
Но, стоит сказать, что в современном мире все дружно кладут хуй на производительность в пользу читаемости. Так что best practices считается - "Всё пишем на LINQ. Если приложение тормозит, то замеряем профайлером. Если проблема в коде с LINQ, то перепишем его."
оценить через О(н) и другие асимптотические показатели, как и всю алгоритмическую сложность/эффективность кода
.Каунт(предикат) будет работать через получение энумератора и инкремент счетчика при удовлетворении условия, так что конкретно в данном месте ты ничего кроме времени не потеряешь
>if(yourCollection.SomeField == 42)
Собственно, наглядная демонстрация того, как быстро можно обосраться с таким подходом. Я имел ввиду конечно же:
if(yourCollection.SomeField == 42)
> Использование LINQ будет менее производительным, в сравнении с простым массивов и циклом со счётчиком.
это схуяли?
>>889712
Кароч, сам потестил с помощью Stopwatch и пришёл к интересному выводу: чем массив больше, тем меньше разница ручного обхода с LINQ. Но обход ручками аж в 30 раз эффективнее на малых (кол-во элементов <1К) и всего в 2 раза на больших (>=100000).
стопвотч в таких анализах не самое эффективное средство. вангую ты еще без прогрева дженнриков тратил,запуская линкью следом после итерации массива?
хуйня этот твой тест, в массиве, состоящем из одного/двух элементов небось получишь разницу на джва порядка
в офисе буду - отвечу, если будет интересно
во-первых, в первом случае ты захватываешь упаковку значения результата в Console.WriteLine, в подсчет времени выполнения
во-вторых, ты сравниваешь методы для int[] (который является фундаментальным типом) и IEnumerable<T> (который является а) хуй пойми чем для рантайма, б) является универсальным типом). и тут надо знать, как дженерики вообще работают: jit компилирует на ходу (если еще не сделал это) отдельный тип для всех ссылочных типов и по каждому на все значимые. следовательно, ты, вкупе со всем, загоняешь в подсчет времени выполнения еще интервал компиляции класса
отсюда напрашивается объяснение этому вот:
> чем массив больше, тем меньше разница ручного обхода с LINQ
если, условно говоря, компиляция типа и упаковка инта в кучу занимает 10 условных единиц времени, а обход массива из n элементов - n * 0.1, то, грубо говоря, на двухсотом элементе массива время выполнения обоих случаев выйдет в паритет
ну, и в-третьих - реализация IEnumerable<T>.Count(Func) выглядит так:
if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
int count = 0;
foreach (TSource element in source) {
checked {
if (predicate(element)) count++;
}
}
return count;
тут мне сложно пока что давать этому оценку, бенчмарки for/foreach довольно сильно разнятся и говорить, что linq хуёв только из-за foreach, я бы не стал (а может быть и стал)
Но хабрабляди пишут что foreach пиздец как оптимизирован и потому используется везде, где только можно.
он поэтому и оптимизирован потомушто используется везде, где только можно
в основном бытует мнение, что foreach сиравно медленнее, чем for. но, даже если это и так, насколько медленнее? одна статья 13го года говорит, что в 0.000000000000000000000001 раз, другая, 14го, дает разницу в несколько раз. кому верить - непонятно никому, естественно
какая нахуй сегодня разница в скорости foreach или for. Похуй на декларативность, foreach - тут тебе и рефлекция инклудет, и вся разная кошерность. Учитывая что в 99% на шарпе пишутся web решения, а значит и деплоятся на win сервах(кол-во решений на core умножаю на 0), вопрос о быстродействии отпадает сам по себе
Дело в том, что я просто пиздец как хочу выучить этот язык, я, блядь, просто обажаю шарп!
Но увы, синтаксисы я не знаю, общий подход также не знаком мне.
Поэтому няши, я вас прошу не кидать в меня говно и подкинуть идеи, как нормально выучить шарп с нуля. Я готов днем и ночью вникать и делать, только вот решить не могу, везде советуют разное.
Отдельная просьба, написать именно то, с чего вы начинали сами, ну или хотя бы лучшую книженцию для новичков по шарпу, можно и видео уроки, сайты и т.д.
Буду вам очень благодарен!
>везде советуют разное
Я бы тебе посоветовал, но это для тебя будет лишь +1 способ выучить c#.
>я обожаю шарп
>синтакис не знаю, общих подходов не знаю
>хочу нормально выучить.
Ты охуел тут на ноль делить?
А вообще ты странный, в шапке указан большой список литературы, рассортированной к тому же. Посмотри для начала шапку, а потом уже сам поймешь.
печально, но приходится работать с такими же гениями, как и ты. вас где-то в инкубаторе делают? откуда ж такой тотальный похуизм к тому, чем занимаешься
>в основном бытует мнение, что foreach сиравно медленнее, чем for. но, даже если это и так, насколько медленнее? одна статья 13го года говорит, что в 0.000000000000000000000001 раз, другая, 14го, дает разницу в несколько раз.
Это легко померить. В C# 2.0 разница точно была, по памяти примерно на 30% при проходе по массиву intов. Сейчас тот же код (у меня сохранился с тех лет) на C# 4.6 никакой разницы не показывает вообще.
Кстати раньше и тернарный оператор был на 20% медленнее чем if else.
П - практикуй, начни с лабораторок для студентиков.
И - импровизируй, решай задачи максимально разными способами, от очевидных до самых ебанутых. Если не знаешь последних - ищи в интернетике по ключевым словам задачи.
Толку от чтения книг без понимания зачем оно там всё так мутно расписано - нет. Решение задач создаст необходимость и возможно мотивацию при очевидном ощущении прогрессаю
Да.
просто ты вчера прочитал про потоки и решил, что вот это не хуйня, а все остальное хуйня?
тащемта все из мелочей складывается: идеально спроектировал синхронизацию потоков/данных, но проебал в работе с коллекцией/памятью - считай, зря время потратил
Понял, спасибо.
А есть охуенные документы по-типу autoit-овской?
Там на русском все так охуенно написано, подача легкая, примеры также легкие, очень легко освоить новичку.
Подобные доки для шарпа есть?
Вот пример autoit-овской документации: https://autoit-script.ru/autoit3_docs/functions/ControlListView.htm
OBSOLETE
Я не выучил, я его учу. Знал до него на среднем уровне Си - базовые навыки алгоритмов, дискретной математики, строения ПК и ОС имеются. В данный момент активно нарабатываю практику работы с LINQ + коллекции (оче удобно). Дальше планирую GUI(WPF) + сети (сокеты/хуекеты). Пидорю тестовые задания для джуниуров. 90% вопросов решаются правильным запросом в гугл и последующим переходом на англоязычный Stackoverflow.
По книгам могу посоветовать следующий порядок: Троелсон -> Альбахари -> Рихтер.
Учти, я говорю только про язык - навыку программирования можно научиться только пидоря код, читать паттерны/алгоритмику, искать схожие решение и снова и снова и снова пидорить код.
ты немного не понял.
Обосрался с потоками - обосрался с логикой.
Выбрал вместо foreach for - нихуя не помеянлось кроме байтоёбства
Многопоточность ведь не всегда про скорость выполнения.
В случаях оптимизации вопросов нету - ты прав. это я просто решил дополнить.
Я просто к тому что есть более важные вещи чем сравнение for и foreach
>>890426
ну можно поманяфантазировать и представить, что мы пишем кастомную коллекцию и соответствующий кастомный итератор, который оказался не структурой, а коллекцию перебирают по сто раз в наносекунду
не зная, чем является foreach, IEnumerable<> и вся эта хуйня, можно так же нехило обосраться с утечкой памяти, потере времени на сборку мусора (в итоге загоняя временные объекты во второе поколение) не хуже этих ваших потоков
> есть более важные вещи чем сравнение for и foreach
ну тут как посмотреть. вообще, субъективно для меня интереснее зарыться в, казалось бы такое примитивное и очевидное говно, как стукруры vs классы, реализация интерфейсов, перебор коллекций. нупотомушто какие вопросы с многопоточностью являются вот такими, грубо говоря, совершенно неожиданными вещами? ты либо знаешь, либо не знаешь. оно либо работает, либо не сработает потому, что ты еблан. либо new Thread().Start() ибо итак норм, либо более адекватные методы
Загорелся желанием изучить Шарп, скачал видяхи ITVDN и начал смотреть лысого.
Так вот, первые уроки зашли на ура, но вот дальше началось байтоевство, которому мне на данный момент нахуй не нужно.
Поясните за байты, стоит ли все же вынудить себя выучить эту еблю, или можно смело менять обучение на другие уроки и книжки, где нет байтоебства?
Почему-то у всех пригорает с этого.
хотя, массив в тыщщу миллиардов элементов это вам не это. проще было бы уже один массив на 100 элементов прогнать четыре-пять раз дабы не допустить его попадание в LOH
> button99_Click
> richtextbox
> однотипные функции, наполовину состоящие из повторяющегося кода
Фу, блядь. И этот человек ещё рассуждает о внутреннем устройстве языке. Самому то не стыдно такое выкладывать?
Чтобы меньше памяти жрать и дольше выполнялось, для более высокой точности оценки, т.к. tickcount имеет минимальный шаг 16 мс.
>>890622
>Самому то не стыдно такое выкладывать?
Нет. Это отдельный проект который только и состоит из таких мелких функций, всё назначение которых это сделать один тест и получить результат и больше не его никогда использовать. Нет никакого смысла делать что-либо легкочитаемым, поддерживаемым и тому подобное, т.к. никакая поддержка и чтение вообще не подразумевается. Вы ребята слишком увлеклись быдлокодингом, и наверняка каждый тестовый код делаете с паттернами, осмысленными именами и прочей поебенью, и ставлю анус что в серьезном проекте несмотря на всё это обосретесь и сделаете его трудноподдерживаемым в итоге.
Ты там ничего не разберешь. Даже я много чего не понимаю. Многие тесты сделаны для конкретных алгоритмов которые я писал когда-то, я уже даже забыл каких.
Ну так ясен хуй он не разберет, они же рряя одноразовые вы проста быдло и нипанимаете что button1337_Click это удобно а я большие проекты пишу!
> Да, ситуация говорит, что я обосрался. Что ж, сделаем вид, что все по плану и обосрались все вокруг.
У тебя багет что ли?
Паттерны же только уродуют код и делают его менее читаемым для стороннего разработчика. Вообще эта хуйня, зачастую идущая против принципов ООП, не понятно нахуй и откуда взялась.
>минимальный шаг 16 мс
Не всегда, и у тебя сейчас скорее всего 1мс, а вообще можно вручную задать
Создал textBox_logWindow который хочу использовать в качестве лога.
Создал файл класса LogWindow. В самом классе хочу определить методы для запист в лог, сохранения лога и т.д.
Думал что, поскольку общий namespace, для добавления нового текста в лог будет достаточно всего лишь
public static void WriteLog(string data)
{
textBox_logWindow.Text += data;
}
Но хер там был.
Пробовал класс LogWindow делать наследником MainWindow. Но один фиг - имею доступ к текстбоксу в MainWindow но не имею в своем классе.
Прошу учесть при критике и даче рекомендаций, что это вообще моя первая программа на C#.
Класс хотел сделать для того что бы в коде была возможность в одну строку LogWindow.WriteLog(data) выводить информацию о работе программы.
Пикрил мой бот для ла2 написанный на autoit, сейчас пилю другую программу, но хотел такой же лог замутить для наглядности работы.
Чому нет? Не поднимать же микросервисы на каждый чих.
> Класс хотел сделать для того что бы в коде была возможность в одну строку LogWindow.WriteLog(data) выводить информацию о работе программы.
Сделай окно синглтоном и сделай в нём паблик метод WriteLog.
И будет что-то вроде LogWindow.Instance.WriteLog(data).
ЛистБокс же
Нет, это унылая хуйня для даунов.
Там комментатор мягко говоря НЕОЧЕНЬ и слушать его просто невозможно, хотя получше индусов на ютубе с их виденьем на английский язык.
Я в таких случаях делал так.
Класс лога статический и инициализируется в конструкторе главной формы с передачей ему объекта textBox_logWindow. Далее класс лога использует этот объект для вывода
Насчет производительности не скажу, но LINQ запрос читать удобнее чем пердолинг с for/foreach.
Можно пример кода того что ты имеешь ввиду? Если не затруднит.
Вроде понял что ты имеешь ввиду, но по коду бы нагляднее было бы.
Только у меня тут webforms, но я думаю это вряд ли что-то меняет.
Благодарю, попробую у себя прикрутить такой подход.
Насколько это правда? На форуме разработчиков последний пост об обновлениях был вроде в 2012.
Ну и типа да, как сказал другой анон, WPF переродился в UWP
Спасибо анон, я если честно и не думал что кто то подскажет чего внятного, какие то листобоксы, предложение вместо десктопа веб приложение и т.д.
>/pr
С одной стороны мне нравиться сисярп, ибо куча фич и наворотов, но блин - реализация лога на autoit у меня заняла минут 10, на то что бы разобраться как запилить точно такую же вешь сутки ушли(а до этого еще и основы и wpf не один день ковырял). Сложно блин. Особенно то что по сути одну и ту же задачу можно решить десятком способов и не понятно какой способ правилен, а какой говнокод и в будущем вылезет боком.
передача визуального объекта в класс, отвечающий за диагностику, - говнокод
Я насколько понял не говнокодом будет использование data binding. Но блин - в текущий момент для меня это слишком сложно, пытался не раз, но каждый раз после того как весь день читаю гугл и не напишу не одной строчки кода понимаю что мне просто рано еще, надо дальше дрочить теорию и писать хоть что-то как умею. Ибо просто дрочить теорию и вообще ничего не писать только потому что не в состоянии написать как надо - такое себе.
выделить у компонента интерфейс, добавляющий запись, и использовать этот тип в Log
Это бы ничего принципиально не изменило.
Алсо, это всегда легко сделать без изменения архитектуры.
В первую очередь блядь мне надо поставить менеджер пакетов npm, которому нужен nodejs, на котором я никогда не буду писать. Нахрена эта зависимость? Ну ладно. Ставим bower с помощью npm (Один менеджер пакетов другим менеджером пакетов). Далее используем gulp, чтобы вытащить все актуальные файлы из bower_components в заинджектить html файл. При этом main файлы некоторых нужно перегрузить в bower.config. Пиздец. Всё теперь общается через owen, mvc не нужен вообще, да и докер. Пиздец короче.
Можете покидать ваши стеки/ворклоу с работы? Реально используете gulp&bower&npm? Для чего? А Докер? Как это всё работает с continuous integration?
А можно пример в виде кода о чем речь?
Алсо, на msdn вообще было написано что в wpf единственный комильфо вариант юзать data binding. Получение данных для интерфейса нужно сделать средствами xaml. Все остальное быдлокод если верить msdn.
>If you are getting started with WPF, you might wonder whether it is easier to avoid learning data binding, and instead just write code to do most of the data manipulation in your projects. While this may be a valid way to do it, I would suspect that you will grow to use, and perhaps even love, XAML-based data binding.
https://msdn.microsoft.com/en-us/library/aa480224.aspx
Но я слишком туп, сколько не пробовал - либо не компилится, либо не работает.
Найс.
прям весь мир клином на WPF сошелся?
в любом случае, если это будет биндинг, ты выделишь интерфейс не в Window, а ViewModel и будешь уже изменять её стейт
Прошу подсказать как решить проблему или найти обходное решение. Возможно ли приведение из шаблонного делегата в типизированный?
Пример кода:
delegate void DoSmth<T>(object sender, T value);
class SmthClass<T> {
DoSmth<T> doSmth = ...;
void DO () {
OtherClass.Process(ref doSmth); // ТУТ ОШИБКА
}
}
static class OtherClass
{
static void ProcessIntegerDelegate (ref DoSmth<int> doSmth) {...}
}
delegate void DoSmth<T>(object sender, T value);
class SmthClass<T> {
DoSmth<T> doSmth = ...;
void DO () {
var type = typeof(T);
if (type == typeof(int))
OtherClass.ProcessIntegerDelegate(ref doSmth); // ошибка приведения из DoSmth<T> в DoSmth<int>
}
}
static class OtherClass
{
static public void ProcessIntegerDelegate (ref DoSmth<int> doSmth) {...}
}
var intDo = doSmth as DoSmth<int>
class GenericMatrix<Number>
{
Number[][] matrix;
GenericMatrixNumber(int cols, int rows)
{
for (int i = 0; i < cols; i++)
for (int j = 0; j < rows; j++)
matrix[j] = СчетатьХуйню();
}
}
Естесно Comsole.ReadLine не подходит. А как тогда?
Так и знал шо нада про делегаты сначала прочитать. Спасибо.
Как мне зашифровать информацию, с помощью пароля? То есть пользователь вводит любой пароль и он каким-то образом преобразовывается в ключ шифрования. Нагуглил PasswordDeriveBytes, но ему нужна соль и вектор инициализации, откуда мне их брать? Если рандомить, то в следующий раз пользователь не сможет расшифровать информацию этим же паролем. Как быть?
DPAPI, проще некуда.
1. переводишь строку с паролем в массив байт:
var pbytes = Encoding.UTF8.GetBytes(password + "ОХУЕННАЯ_СОЛЬ");
2. хешируешь этот массив байт, превращая его в ключ шифрования:
var aesKey = SHA256Managed.Create().ComputeHash(pbytes);
3. шифруешь AESом с размером ключа = длине хеша и нулевым вектором инициализации:
var AES = new RijndaelManaged();
AES.Mode = CipherMode.CBC;
AES.KeySize = 256;
AES.BlockSize = 128;
AES.Padding = PaddingMode.PKCS7;
using (ICryptoTransform encryptor = AES.CreateEncryptor(aesKey, new byte[16]))
{
return encryptor.TransformFinalBlock(data, 0, data.Length);
}
хранить соль рядом с пользователем. после того, как юзерь что-то навводил сравнивать шифрованый пароль с результатом ПосчитатьХэш(инпуиЮзера, созраненныйСалт)
Текущая мысль сформировалась, что подходит что-то типа JSON сервера, который отдает данные по запросу клиента. Есть ли решения лучше или это достаточно адекватно?
Сразу поправлюсь, планируемые клиенты (их возможно много) могут быть написаны на каком-угодно другом языке. Тут подумалось, а почему бы не отдавать XML?
> в докере
Иди нахуй со своими докерами
>>892884
Просто берешь самый дешевый дроплет на digitalocean, в один клик ставишь туда образ убунты для поднятия вебсервера. Всё это займет 2 минуты, и у тебя уже будет сразу готовый сервак со всеми нужными развернутыми сервисами, и выделенным IP. Дальше настраиваешь мускуль как тебе угодно и работаешь.
Зависит от твоих требований к стабильности серверов. Юзаю DO с начала 2014 года, десяток дроплетов у меня там есть. Ни разу никакой внештатной ситуации не было. Аптайм одного из дроплетов 100% с февраля 2014 года (другие я просто сам по разным причинам перезагружал или временно отключал). Пять баксов в таком случае за самый дешёвый дроплет не жалко.
мсдн не осилил.
Спасибо.
бамп на бамп
>Если я могу написать дерево, сортировку, умею в синхронизацию потоков, веб-приложения, сериализацию - это уже мидл или нет?
Это уже может быть стажер и ты можешь пытаться пройти собеседование на вакансию.
Ну мидл это самое противоречивое, не рыба ни мясо. В общем случае это опыт фултайма от двух лет, все разнится от вакансии к вакансии, но если ты на той же работе проработал джуном 2 года - просись на мидла точно.
Мне теперь интересно стало, что входит в знание сериализации?
>веб-приложения
JavaScript much?
Есть в общем такая ситуация. У меня есть приложение, которое коннектится с сервером, берет оттуда данные кладет это все в словарь(Dictonary) и обновляет значения в этом словаре каждые 200мс ну и соответственно активно использует этот словарь в работе. Возникла необходимость (у заказчика) сделать приблуды в 3Д красивые, быстро работающие, с возможностью покрутиться, "полетать". Решил для этих целей использовать Unity 3D, там тот же C#.
Сначала думал там использовать ту же библиотеку что используется в основном проекте, прочитал как подключать dll к юнити, все подключатся все нормально, а вот именно Interop библиотека для работы с сервером очень старая и не для C# а в общем для .NET 1.0 и при подключении к Unity выдает Marshall ексепшены и т.д.
В общем есть ли вариант в реальном времени получать этот словарь(Dictionary) из другого приложения(unity).
Думал насчет обмена с помощью базы данных, но будет ли это в реальном времени? С другой стороны в первом приложении данные обновляются долго(200мс) должно все успеваться.
>написать дерево
class MyClass
{
List<MyClass> Childs;
}
>сортировка
myArray.OrderBy(x => x.Name);
>сериализация
JsonConvert.SerializeObject(myDto);
Я принят?? Когда подавать документы?
Мы вам перезвоним!
SignalR
>В общем есть ли вариант в реальном времени получать этот словарь(Dictionary) из другого приложения(unity).
Самый быстрый способ - MemoryMappedFile
Поля помечаются атрибутами. Для каждого поля и типа можно указать атрибут и прочитать его функцией MemberInfo.GetCustomAttributes.
Берешь объект, читаешь его поля/свойства функцией
MemberInfo[] members = type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
где, type - тип объекта получаемый функцией GetType объекта. Параметры можно использовать другие.
Дальше хуячишь всё это в кэш чтобы не читать многократно. Можешь не хуячить, тогда всё будет работать медленнее.
Значения полей при сериализации читаешь функцией FieldInfo.GetValue или PropertyInfo.GetValue. Пишутся поля функцией SetValue.
Можешь исходники rest sharp глянуть на гитхабе, там есть минималистичный xml сериализатор десериализатор
Можно без рефлексии (какие нибудь деревья выражений или типа того) определить последовательность ссылок на свойства или поля?
Уточню почему так. Сам сериализуемый класс находится в другой сборке и недоступен для правок. Я хочу написать шаблон который на вход берет сериализуемый класс и добавляет определение порядака и состав сериализуемых членов. Хотелось бы сделать это делкаративно, но очевидно атрибуты тут не проканают.
имеется пул объектов(изменяемый) одного типа по которому нужно пройтись и обработать. Над всем этим прикручен гуи (тип я думаю пока не важен). Проблема в обработке что она может занять до 5 секунд.
Первый вариант который пришёл в лоб - это обрабатывать объекты в другом потоке вызывая асинхронную обработку. Не сосну ли я в таком случае? Порекомендуйте материал по множественным колбэкам в одном потоке, мой рунглишь не позволяет корректно сформировать поисковый запрос.
Накидал картинку для примерного понимания.
скорее всего для CurrentCulture разделителем дробной части является запятая
>>894142
я не понял, какие требования накладываются на этот пул? где ты там собрался соснуть и почему 5 секунд на обработку в твоем случае это много?
множественные колбэки в одном потоке - это задачи с продолжениями (Tasks, Continuations)
все, которые позволяют констрейнты генерика. как и без рекурсивного шаблона
Тогда хер его знает.
>>894281
Зачем ты пиздишь? Это на крестах так, а на шарпе констрен внутри генерика практически пустой.
Если рассматривать констрейн изолированно, то он вообще ничего об аргументе генерика не предполагает. Так что твоя фраза что можно все что позволяет констрейнт вообще ни о чем (с тем же усехом можно сказать пустое множество это множество которое ничего не содержит). А вопрос был явно в связи этого генерика с производным классом его юзающим.
Тогда не используй (:
Это можно сделать, но не нужно. Зачем тебе куча разных ридеров? Какова твоя задача?
Да вся та же сериализация, это я писал выше. Хочу сериализовать внутри класса сримами, для рекурсивного вызова (если поле не простое а другой сериализуемый класс) нужно текущий стрим передать ему и что бы он с текущего места взял сколько ему надо, размазал по себе и вернул поток для дальнейшей сериализации.
Что не так в таком подходе?
> 120k
> C#
> десктоп
> Winforms
> приглашают в ДС из пердей
Ну не ведись анон, такая жирная разводка, на самых лохов ориентирована.
Смотря где жить будешь. От 20к (это всё ебеня из которых добираться до Москвы 1.5-2 часа) до всей зарплаты соответственно. Все цифры и карта есть в интернете. По еде можно укладываться и в тыщу в месяц картофан + крупы, хотя таких целей у тебя вроде и нет.
мидл?
Подробнее
да, собственно говоря, все не так
стоит начать с вопроса: зачем тебе множество потоков для разбора одного объекта? вопрос снимается, конечно, если у тебя исходных данных на гигабайт. если ты думаешь, что распараллеливать такую задачу это очень эффективно, то я тебе отвечу - не в твоем случае
Поток один, это адаптеров над этим потоком несколько. А несколько их из-за рекурсивности сериализации вложенных членов. Т.е. метод Serialize каждого класса заводит свой адаптер типа BinaryWriter из BCL и сериализует члены, когда натыкается на непростой член пытается сериализовать его, а ему в свою очередь тоже придется поднять такой же райтер над потоком который ему дадут.
Я так и не понял что все не так? Если писать без потоков, то придётся ебаццо с индексами в массивах, что некрасиво.
ааа, блжад, потоки - это Stream, а не Thread
я думаю, что индексами было бы проще и легче, учитывая, что тебе не придется в каждом разе прошагивать данные от начала до N. даже попросту сдвигая позицию ридера
У меня была идея-фикс реализовать вообще без индексов, что бы всё было только в терминах потоков и адаптеров.
ну довай, похвастаешься потом
Какой уровень? Сеньор - маловато. Для мидла охуенно.
{
public ResearchTeamCollection(){ }
Dictionary<TKey, ResearchTeam> dictionary = new Dictionary<TKey, ResearchTeam>();
public void dictionaryAdd()
{
dictionary.Add(TKey, new ResearchTeam()); // как мне тут сделать ключ словаря независимым от типа?
}
}
Допустим, в другом классе я инициализирую так:
ResearchTeamCollection<string> coll = new ResearchTeamCollection<string>();
coll.dictionaryAdd();
Допустим, добавляю вот так:
coll.dictionaryAdd("First", new ResearchTeam());
Если бы был тип int, добавлял бы так:
coll.dictionaryAdd(1, new ResearchTeam());
Каким образом тогда мне записать функцию для всех типов?
Отклеилось.
сам, что-то вроде хэш-функции. чтобы было так:
Add(ResearchTeam rt)
{ dictionary.Add(KeyDelegate(rt), rt); }
Я понял, как создавать репозиторий из VS, как в него коммитить и запихивать изменения, но в упор не вижу функции залить уже существующий проект без изменений на github.
>>895285
Да всё уже, можно сказать разобрался.
Просто мне нужно несколько проектов закинуть на гит, получилось закинуть 2 из N, а с 1 я где то накосячил, и проебал кнопку паблиш, теперь хуй знает где её найти. Как отвязать проект от репозитория или как закинуть на новый?
Мда, я первый проект захуярил в visual studio team services вместо git, и теперь ору на гитхаб "ЧО ТЫ СУКА МОЙ ПРОЕКТ НЕ ПОКАЗЫВАЕШ?!".
Как сменить VSTS на github в team explorer'е?
Самый простой способ - удалить скрытую физическую папку репозитория в корне проекта. Ну или разобраться с окном Team Explorer. Или как нормальный программист, поставить TortoiseGit.
Предлагаешь мне с терминалом гита ебаться? У меня память не резиновая еще и матюки гита запоминать.
Терминал гита хотя бы глючит не так часто, как тулзы для работы с гитом в vs. Когда работал с гитом через tfs, то частенько ошибки выскакивали, когда запушить невозможно или запулить какого-то хуя, когда в терминале все ок работало. Короче рекомендую перекатываться на командную строку - сначала плюешься, а потом охуеваешь как раньше без этого жил.
мимо-проходил
>тулзы для работы с гитом в vs
TortoiseGit не работает с VS, или я чего-то не знаю.
>рекомендую перекатываться на командную строку
Я и так некоторые извращенные команды выполняю через командную строку, потому что только через нее это можно сделать. Но для обычного сценария, например просмотр графа веток, с головой хватает TortoiseGit.
уже давно хочу вкатиться в .NET на апворк, парни, подскажите, это реально вообще? Если да, то что посоветуете, как начать?
случайная сажа
> матюки гита запоминать
git pull
git commit
git push
ебать тут много
> память не резиновая
ну, во-первых существует блокнот. и я ничего плохого не вижу записать что-то вроде <сохранить изменения git commit -m "comment message">
во-вторых, как же ты кодэ свой пишешь, если еще несколько литералов запомнить - это тяжкий труд? если у тебя сплошной if/else, мой вопрос снимается
>ебать тут много
Я часто еще переключаюсь между ветками, соединяю коммиты, откатываюсь до определенной версии, создаю и удаляю ветки, смотрю историю изменений определенного автора...
>существует блокнот
Есть у меня блокнот, там несколько МБ текста "важной" информации, которую надо не забыть, приблизительно в таком же формате.
>у тебя сплошной if/else
Угадал, пикрелейтед недавнего кода. Хотя я хорошо помню листинги нескольких программ на 1-3 миллиона строк кода.
Это же F# на пике?
В чем разница между типами Statement и Block? Они же оба алгеброические типы?
мимо не шарю в фшарп
>Это же F# на пике?
Да.
>В чем разница между типами Statement и Block?
Block содержит список Statement.
>Они же оба алгеброические типы?
Да.
Хотя, если говорить более правильно, то:
Block - это record.
Statement - это discriminated union.
>Block - это record.
>Statement - это discriminated union.
Что-то понятнее не стало, надо идти учить F#.
Вообще C# заебал своей топорностью, хочется укатиться на более гибкий-современный язык,
но блин как подумаю что все придется переписывать с функциональной парадигме - то сразу перехочиваетсяю
>Что-то понятнее не стало
https://fsharpforfunandprofit.com/posts/records/
https://fsharpforfunandprofit.com/posts/discriminated-unions/
>укатиться на более гибкий-современный язык
Так C# и есть гибкий и современный язык. F# его скорее дополняет, чем заменяет.
>что не так с гибкостью сишарпа, например?
Это то что сходу вспомнил:
- Отсутвие type inference для полей и свойтв (private Diction<string, string> _field = new Dictionary<string, string>())
- Отсутсвие primary contructor. В каждом классе приходится писать пик1
- if/else switch try/cache (тут не уверен) - не выражения и не возвращают результат
- нет нормальных (не Func<>) функциональных типов и функций на топ-левеле (язык вроде бы мультипарадигменный, но для любителей функциональшины у нас static methods)
- Notification проперти из MVVM (без кодогенеровов типа Fody) это ебучие портянки кода, которые средствами языка нельзя абстрагировать
- Нельзя делать свои DSL средствами языки. Я бы давно отказался от Xaml и писал все в коде, но это получается слишком избыточно.
- Отсутвие защиты он Null ссылок
- Отсутствие оператор let/val (это как var, только нельзя изменять)
>>895425
>Так C# и есть гибкий и современный язык. F# его скорее дополняет, чем заменяет.
Надо признать что C# за 15 лет уже накопил свое легаси и для .NET он тоже что и Java для JVM (конечно C# уделывает Java) - рабочая лошадка для энтерпрайза .
Только в JVM я могу свалить на какую-нибудь Scala/Kotlin/Groovy и там будет большое комьюнити,
а в .NET из популярных альтернатив это VB лучше убейте и F#
> Отсутвие type inference для полей и свойтв
вот тут мне тяжело представить преимущества этого вот, за исключением того, что "мне впадлу писать длинный тип". ибо в качестве свойств, по большому счету, используются интерфейсы/абстрактные типы. к тому же для библиотек, используемых в других солюшнах, при условии наличия публичного сеттера, это все покажется странным. может быть я что-то не видел в своей жизни.
> primary contructor
эту штуку обещают уже второй релиз. чтож, очередной сахар
> if/else switch try/cache
хех, для if-else есть тернарный оператор. как можно использовать switch в руби мне, например, тоже понравилось. но вот что из кетч ты хочешь получить? или ты имеешь ввиду что-то вроде return { try this.Calcuate(); } catch { null; }?
> нет нормальных (не Func<>) функциональных типов и функций на топ-левеле
я полный ноль в ФП, что это все значит?
> защиты он Null ссылок
чтобы не вылезал NRE? и где тут плюс?
> оператор let/val
ну тут не знаю, сомнительно. есть readonly, с другой стороны почему бы и нет. но тоже обходился без подобного и это не мешало мне
>я полный ноль в ФП, что это все значит?
Если сильно упрощенно, есть что-то типа наследования из ООП, только в функциональном стиле. Когда можно переиспользовать ранее написанный код. Одна из таких особенностей называется каррирование:
Func<int, Func<int, int>> sum = x => y => x + y;
Переиспользовать можно например так:
Func<int, int> add1 = sum(1);
Вот только на C# это очень криво выглядит, а некоторые вещи и вовсе нельзя делать.
>чтобы не вылезал NRE? и где тут плюс?
В ООП NRE падает в рантайме, в функциональщине - во время компиляции. Нулевая вероятность попасть NRE на лив.
> в функциональщине - во время компиляции
вангую потому, что понятия NULL в ФП отсутствует в принципе?
> вангую потому, что понятия NULL в ФП отсутствует в принципе?
Те же яйца, только в профиль. По умолчанию все типы не могут принимать null, надо явно говорить что вот этот тип может быть null. А везде, где надо достать значение такой переменной, надо писать if, который должен обязательно покрывать все ветления, иначе ошибка компиляции. Такой тип называется чуть иначе, но суть та же. Но и никто не запрещает использовать null в том же F#.
У меня есть класс Log. Я в классе MainWindow пилю поле Log log = new Log.
После чего пилю в коде this.DataContext = log;
И могу использовать в xaml binding для получения полей из объекта log. Text="{Binding Data, Mode=OneWay}"
Вопрос - как использовать data binding из нескольких обеъктов. У меня например есть 2 текстбокса. Одному надо брать данные из объекта log, второй из объекта fonts.
В гугле везде примеры с использованием одного объекта, а как быть если тебе надо из нескольких в wpf отображать данные - вообще хз.
Я тут выше спрашивал совета по поводу написания класса Log, как мне порекомендовали смог сделать >>891410, но теперь пытаюсь сделать все более грамотно
Это абсолютно идиотский подход к поддержке продукта.
по поводу каррирования еще, есть же продолжения у задач. конечно, поднимать стейт-машины задля достижения такого стиля - тупость, но хоть так лол
привязать логкомпонкнт к свойству пью модели, которое, в свою очередь, использовать в двух разных классах
или использовать конвертеры при биндинге
Если не затруднит, покажи что ты иммешь ввиду на простейших примерах в коде. На словах вообще не понял.
>Зачем сраный visual studio ставит 32 вонючих пакета
А нафиг тебе VS, попробуй VS Code.
Для лаб или новых проектов на CoreCLR хватает.
Оба было бы интересно посмотреть :3
Вьюмодель это промежуточный класс, в котором будут все необходимые мне классы. Этот промежуточный класс я задаю в this.DataContext, после чего смогу через точку обращаться к классам, внутри класса из xaml?
Можно еще у Window.cs создать два публичных свойства VM1 и VM2, а в XAML нужным элементам установить нужный VM.
Как-то так пишу на коленке
public class ViewModel
{
Log log = new Log();
Font font = new Font();
public Log Log
{
get { return log}
set { log = value;}
}
public Font Font
{
get { return font}
set { font = value;}
}
}
в Window.cs
this.DataContext = new ViewModel()
в XAML
Text="{Binding Log.Data, Mode=OneWay}"
Text="{Binding Font.Data, Mode=OneWay}"
Все, понял. Спасибо. У меня так часто бывает - когда читаю рекомендации где мне словами отвечают - вообще не вдупляю чего от меня хотят, но на код глянешь и с первого раза понимаешь все.
Еще раз спасибо, я с этими биндингами не один день пердолился пытаясь понять как их использовать и по тиху мозайка начинает складываться.
Алсо. Если мне потребуется mode=TwoWay, делать все так же, или есть свои нюансы?
Твои классы(те же Log и Font, например) придется переделать вот так: хотя я вообще макака, может есть и другой адекватный способ
http://metanit.com/sharp/wpf/11.2.php
Хотя можно реализовать INotifyPropertyChanged только во ViewModel и писать проперти для данных объекта.
public string Data
{
get { return log.Data}
set { log.Data = value; OnPropertyChanged("Data"); }
}
Вообще когда начал пробовать сам еще 1 вопрос возник.
Раньше я создавал объект класса лога, делал this.DataContext = log, а дальше спокойно проделывалыв манипуляции с объектом. Например вызывал log.Write(string) который делал log.Data += string + "\n", после чего все это дело попадало в textBox_log.
Сделал я класс ViewModel. Сделал я this.DataContext = new ViewModel(), и обнаружил что не знаю как мне вызвать метод Write() объекта log, для того что бы поместить мне в лог нужную инфую.
Можно конечно сделать ViewModel viewModel = new ViewModel();
this.DataContext = viewModel;
После чего делать так
viewModel.Log.Write("some text"); Но выглядит как то не очень(хотя я вообще хз, может это и норма, я вообще ньюфаня в ооп и в жизни не писал ничего сложнее скриптов для автоматизации небольших задач с пк).
Как правильно и граммотно поступать то?
За ссылку спасибо. Сам учусь по этому сайту, очень доступно и просто объясняет, но своими бы силами очень долго искал ответ. Это то мне как раз и нужно. Я делаю программу, в процессе работы которой в лог выводится результат работы. Юзер выбрал опции, кликнул кнопку, выполнился код и в логе отобразилась информация о проделаном и результатах. Тут то мне INotifyPropertyChanged и понадобится.
Но для начала пытаюсь научится статичный текст выводить вот, от простого к сложному.
Почитай про MVVM-паттерн, WPF заточен под него. Я так понял ты вызываешь метод из Window.cs(code-behind). Логику нужно выносить оттуда (Честно, я сам пока не до конца понимаю MVVM, все операции с данными и прочим я засовываю во тоже ViewModel).
Благодарю, на том же метаните нашел годный материал по mvvm. Таки да, вся куча логики было в MainWindow.xaml.cs. Буду это все дело выносить оттуда.
Ты путаешь c MVC, в которой ViewModel называют plain-data объект для UI. Другое значение - роль в MVVM паттерне, и там код вполне себе будет, но не бизнес-логика, это да. ViewModel должен по идее следить за изменениями в модели и преобразовывать их во вью, а так же за пользовательским вводом(изменениями view) и форвардить их в Model. 2-way binding.
мимодил
Интересно, а генерация FullName из FirstName и LastName - это бизнес-логика, но что она забыла в ViewModel?
мимоиздеваюсь
да у тебя и Console.Write это бизнес-логика
Ну я например понимаю что то что я пилю, можно сделать без применения всей этой еболы mvvm, wpf и т.д.
Можно было и на winform запилить спокойно и не ебать себе мозги, но у меня то целью являются не написание программы, а обучение. Программа как средство для изучения.
Даже в мвс модель может содержать функции
Интересует архитектура.
И еще такое:
У нас есть инет магаз "ВасяПупкин".
Зачем нам отделать в отдельный проект взаимодействие с БД
Пример:
ВасяПупкин.Domain -> собственно само взаимодействие с БД
ВасяПупкин.UI -> ASP.MVC проект.
Если можно все сделать в одном проекте ASP.MVC, а связь с бд организовать в Models
как строить базы данных для все вряд ли отличается от того, как проектировать таковую для руби или еще какого говна
ты можешь вообще делать все в одном проекте или одном методе. цель - изолировать юайные штуки от логики, логику - от бд
Тогда Next(0, 2)
car game 2d sources download
блят, чтобы не добавлять референсы повторно*
Попробуй посмотреть здесь
http://metanit.com/sharp/tutorial/10.1.php
Еще у книжечках почитай на тему сборок, у Троелсена вроде неплохо написано.
https://gist.github.com/anonymous/cdd24c2db8d2d10058f853e409238987?ts=4
Хочу при переходе Entity<->DTO перегонять int[] в строку вида "2,3,4,5" и обратно. Но маппинг работает только в одну сторону.
Я понимаю, что можно дёргать конструктор напрямую, вместо ForMember, но я хочу использовать это в другом проекте, там в конструкторе примерно миллиард аргументов и только один из них нужно по хитрому конвертировать.
Проблема в том, что это плохой рандом, ведь n будет в 50%
Сделал простой атрибут.
Запилил класс с несколькими атрибутированными переменными. Потом функцию, которая берёт всё поля и их атрибуты и отправляет в конструктор другого класса.
WTF?!?!?!??!??!!!!!11
Вместо функций подставлял стринги и оно их отправляло.
Что пошло не так?
Надо сразу фулстак изучать. Я вот курсы на плюралсайте смотрю и мне норм. Вот здесь можно бесплатную подписку на 3 месяца получить:
https://www.reddit.com/r/dotnet/comments/54i6to/good_aspnet_core_and_angular_2_tutorial/d82nbxc/
>>891871-кун
А в чём ещё? Изначально надо было в консоли делать.
бросай все это дело, не твое это. ты ж даже вопрос понятно сформулировать не в состоянии
Вместо траллинга мог бы пояснить по скрину.
Спасибо за отклик, тики отловил NULL и вроде работает. Такой момент, возможно ли имея имя поля в строке присвоить в экземпляр какое-либо значение?
да, через рефлексию вообще все нах можно. вот только как делать я, естественно не помню. но помню, что все методы из .Reflection носят говорящие названия. ищи методы типа SetField() или SetValue()
Гуглил - ничего.
Возможно ты анон сможешь помочь мне
Если ты листал апворк, то видел достаточно индусов, которые вполне нормально гребут на asp.net. Он так то нужен как правило какому-нибудь энтерпрайзу, это же как джава, в идеале это не самый удачный стэк, но если ты его знаешь - то без работы офк не останешься.
мимо диванный, который внаглую перешёл на удалёнку вместо офиса
начни с любого
А там проще "путями" сразу учить
https://app.pluralsight.com/paths/skill/mvc5
https://app.pluralsight.com/paths/skill/javascript
System.Data.SqlClient.SqlConnection используя User ID и password. Вот только я нихуя не въебал, User ID - это логин для входа в MS SQL сервер? Если да, то как мне сделать так, чтобы задачи из под этого соединения выполнялись пользователем, созданным от этого логина? Просто пользователь состоит обладает определенными ролями, которые мне нужны, и вот чё то я не догоняю, как работать из C# в MSSQL именно от имени определенного пользователя, а не логина.
1. На сервере создаешь логин с нужным именем и паролем.
2. Даешь нужные права на нужную базу.
3. На сервере разрешаешь логин через маздай аутентификацию И sql аутентификацию.
4. В коннекшен стринге прописываешь путь к серверу, имя бд и креденшиалы созданного пользователя.
5. ???
6. Идешь нахуй
>System.Data.SqlClient.SqlConnection
И там похуй на чем ты подключение делаешь, хоть на камне высекаешь.
А разве можно дать какие-либо права на действия внутри БД логину? Я думал их можно дать только пользователям и ролям я совсем недавно в SQL
хочу плотно заняться десктопными приложениями на WPF, стоит ли мне изначально возиться с прямой реализацией патерная MVVM или лучше накатить тулкит и изучать через него?
Лучше вообще не лезь в WPF и его десктоп, а изучай что нибудь более современное. Ну или если очень хочется в десктоп - c++ Qt
Кт СЛОЖНА, а C# уже как никак использую но в консольном виде. Интересна только Win платформа, поэтому WPF тут логичен и очевиден.
Ну тогда готовься к подводным камням при расширении базовых контролов, через хуй пойми что работающим ресурсам и прочим весёлостям WPF, который не поддерживается официальными разработчиками с 2012.
Не знаю, о каком именно тулките ты говоришь, и чем он тебе поможет в реализации MVVM, но я бы советовал ещё на берегу вкурить, что предполагает под собой следование принципам MVVM, и как он реализуется в WPF.
А там именно дотнетчики сидят, или вообще все?
Ты судишь по своему опыту или начитался статеек в этих ваших интернетах? Изучаю C# не так много времени и давно приглядывался к C++, но он жутко неудобен в том, что сделать в нём что-то неправильно как нехуй петь, а я не профессиональный программист и пишу в основном для своих нужд. Строгая типизация и управляемая память для меня значительное преимущество от которого не хочется отказываться.
Из статеек вычитал только то, что WPF чуваки из microsoft не поддерживают с 2012.
По своему опыту высказал остальное. Из того, что больше всего рвало пердак, вспоминаются проблемы с комбинированием словарей ресурсов и стилей одновременно в одном контейнере ресурсов, черезжопное подключение обработчиков событий в словарях ресурсов к контролам внутри стилей, двойное срабатывание события DateChanged на DateControl'е или какой там стандартный, не помню уже при смене даты DatePicker, и одинарном при смене даты через текстовое поле на том же контроле из-за роутинга событий, кажется. исправляется костыльно, ну и прочие мелкие недоумения при использовании XAML'а, которые заключались в том, когда ты восклицаешь "да схуяли нельзя?!" там, где, казалось бы, всё должно работать. И то, что разочаровало меня более всего, в моей 600к мухосрани нет ни одной вакансии, ориентированной на WPF, да и вообще, как мне кажется, из за тенденции перехода на тонкие клиенты и мобильные приложения, десктоп умирает.
>разочаровало меня более всего
>нет ни одной вакансии
Мне не актуально, значит впринципе можно заморочиться.
Мда. Сравнил хуй с пальцем. Васяноподелие qt на котором весь софт выглядит - привет 2000, либо wpf на котором запилена студия и офис.
Я конечно не хочу принижать заслуги qt в прошлом, но в данный момент это удел пердоликов. Прогрессивные люди выбирают c#.
Последний Qt 5.6 очень даже няшный, но это не отменяет того факта что придётся учить целый новый язык.
Чо т я погуглил и люди действительно юзают WPF. Я думал, что майкрософт выкатят какую-то йобу вместе с .net core, но ничего не нашёл. UWP тоже не особо взлетел.
http://www.telerik.com/blogs/survey-report-the-dotnet-developer-of-2016
Если видишь вакансии - так то можно и изучить, но это всё такое.
>Черно-белые логотипы, цветов еще не изобрели
>Даже не черные - бледно-серые, краска в дефиците
>будущее
На хуй такое будущее
так ты даун, это стили такие применены - когда наводишь на лого картинка приобретает оригинальные цвета. короче яебу дивелапер
Ну вот я навел на лого и нихуя ничего не приобрело, ты пиздабол и даун.
Бля курсор не отображается на принт скрине.
ну подумаешь подобосрался чутка, чо ты ругаешься, макакен
А в самом Dispose() чего делать, ждать пока завершиться или послать запрос отмены и идти дальше?
В штатном выполении я и не собираюсь, но если юзер переходит на другю страницу например, тут так просто не отделаешься.
попроси не переходить
Как быть? Мб есть альтернативы DataAdapter'у?
А всё, отбой. У SqlConnection есть события, которые мне подходят.
>DataSet из ADO.NET через SqlDataAdapter
У тебя древнее говно к жопе прилипло! В ADO.NET нет DataSet, который из .NET Framework 2. Чего ж ты на первой версии не пишешь, некрофил?
Тише, тише. Я мимостудент, и нам не рассказывали про EF, а мне слишком впадлу им заниматься для моих нужд. И я думал, что DataSet он родом из ADO.NET а может и нет, я хуй его знает. Беру его из using System.Data. Это разве не ADO.net?
Если переводить на русский термины, есть "подключенные" и "отключенные" классы. Первые работают с базой данных, вторые работают не с базой данных и нахуй не нужны.
Так вот: первые - Connection, Command, DataReader, DataAdapter;
Тогда как вторые DataSet, DataTable, DataRow, DataColumn. Это пиздец какие ебанутые классы. Часть простых вещей без костылей не сделать.
Первые классы даже сейчас используются, например где важна скорость.
Вторым - есть много замен, или они вообще не применимы к задаче.
List<T> будет вместе со всем прочим хранить ссылку на T[], который, в свою очередь, будет представлять собой сплошной ряд объектов в куче (это исключая случай, когда массив будет достаточно велик дабы попасть в LOH. в таком разе ряд будет не очень сплошным, но это уже совсем другая история)
Физически list как массив в памяти представлен?
Все данные находятся последовательно, а при добавлении остальное сдвигается?
https://docs.google.com/document/d/1APjX_IMyCsODb2JFJFAype-8dj4xusR5hug0iG-A9Jo/edit?usp=sharing
Еще раз извините за оффтоп и не кидайтесь говном.
тебе говорят, что List сам по себе не содержит объектов коллекций, но ты за свое блять
Я не он, и у меня вопрос как физически представлен в памяти лист. Это же не линкедлист в котором каждый элемент хранит ссылку на предыдущий и следующий. Как он хранится в памяти?
>Строгая типизация
C++ примерно так же строго типизирован как и шарпик. Гц удобная штука, да.
Лол и battle.net десктоп-прожка.
как и любой другой ссылочный тип - имея под боком все значимые типы и интовые ссылки на ссылочные типы в куче в границах, обозначенных размером типа
Тут нашел http://stackoverflow.com/questions/29898518/is-a-generic-list-stored-contiguously-in-memory
Что list содержит массив типа T
А при добавлении
If Count already equals Capacity, the capacity of the List<T> is increased by automatically reallocating the internal array, and the existing elements are copied to the new array before the new element is added.
If Count is less than Capacity, this method is an O(1) operation. If the capacity needs to be increased to accommodate the new element, this method becomes an O(n) operation, where n is Count.
Не совсем понятно что именно значит reallocating the internal array
Это выделение памяти под новый массив и копирование туда данных с новым добавленным элементом?
Тогда может для некоторых List заранее Capacity задвать если знаешь что List будет расти чтобы избежать лишних выделений памяти?
Именно, задавая capacity избавляешься от ненужных реаллокаций
>Что list содержит массив типа T
соу слоу, я это написал первым ответом, но зачем читать слова с первого раза
ef в целом так себе вариант
тем более для вызова фактически raw sql можно придумать и ченьть получше
Никто с ним не работал, потому что он не для людей. Если у тебя хранимки в БД - просто пиши sql запросики
Можешь попробовать linq2db - в отличии от EF не такой тяжелый. Сам процедурки не вызывал, но поддержка всего этого есть.
dapper
Начало можно дрожать, конечно-оно совсем ньюфажное.
ты ж сам все сказал, че спрашивать-то?
Если не можешь/не хочешь читать книги на английском - тебе в профессии делать нечего.
Элитка, не рвись. Начинать можно и родного языка, рунглишь нужен для того, чтобы быть на острие технологий.
Ух ты, самоподдув в 2016-то году.
>.NET THREAD #5 (C#/F#/VB)
>В шапке ни одного ресурса по F#
Шо за хуйня?
Дайте годных книг/ресурсов (кроме fsharpforfunandprofit.com)
Его сейчас вообще кто-то использует? Вакансий по-моему особо нету нихуя вот и не нужен.
много вакансий C#/F# девелоперов, шо ты рассказываешь тут
в коде:
1)
var l = new List<Struct>();
var s = new Struct();
for(int i =0; i < 1000; i++)
{
s.a = 3;
s.b = 1;
l.Add(s);
}
или
2)
var l = new List<Struct>();
for(int i =0; i < 1000; i++)
{
l.Add(new Struct() { a = 3, b = i});
}
Те есть класс, в котором тоже ссылочные типы. Как их лучше всего создавать или нет никакой разницы? Созданные в методах ссылочные типы будут сохранять свою жизнеспособность на всем протяжении сохранения ссылки?
>Его сейчас вообще кто-то использует? Вакансий по-моему особо нету нихуя вот и не нужен.
> 2016
> учить язык только по востребованности на рынке
Чувак ты не шаришь.
Его надо выучить хотя бы что бы расширить свое сознание разных подходов проектирования.
После него даже твой C# код станет лучше и чище.
Да и вообще, ты что безработный школьник или не в состояние два язык запомнить?
Петуха забыли спросить.
Спокойно читаю документацию на иглише, вся системы и весь софт на инглише. Но при этом - если есть вменяемая ру альтернатива документации или книги буду читать на русском. Ибо мозг раз в 10 меньше будет уставать. Для того что бы изучать английский, есть курсы, спец книги и спец сайты, документацию я читаю совсем для другого, и на русском языке я куда быстрее и куда больше смогу усвоить.
Я в первую очередь учу язык из соображения его востребованности. Для меня это всего лишь способ заработка. Оставь свои мантры для красноглазиков.
С работой как раз все ОК. Пишу тырпрайз на c#, для себя учу f#.
Ты только глянь как охуенно выглядит "качалка webm и картинок с двачей"
язык учу пару дней
Как-будто что-то плохое.
быстрее инициализировать список можно только указав Capacity в конструкторе. то, шо ты привел тут будет однозначно одинаково по скорости ибо для Add() значение структуры будет копироваться
>>900631
> где
троелсен, рихтер, msdn
> Как их лучше всего создавать или нет никакой разницы
что значит как? или кого "их"?
> Созданные в методах ссылочные типы будут сохранять свою жизнеспособность на всем протяжении сохранения ссылки?
в случае, если это локальная переменная онли и никуда не пойдет дальше, до первого сбора мусора. в противном случае это зависит от времени жизни объекта, в котором он используется, и его поведения
>>900642
это решарпер подсвечивает typename1 -> typename2? или 2015 студия?
А разве не будет так, что в первом случае он один раз выделит перменную в стеке, из которых на каждом Add будет копировать значение, во втором случае на каждом Add сначала будет создан временный объект (в стеке?) и уже из него производиться копирование?
>это решарпер подсвечивает typename1 -> typename2? или 2015 студия?
Это Visual Studio Code с установленным расширением для F# (и кстати core clr приложение)
2015 студия вроде этого делать пока не умеет,
а решарпер вроде и не собирается F# поддерживать.
>Стек на основе односвязного списка. Операции протолкнуть и вытолкнуть.
Подскажите, куда хоть капать-то? Лаба немного на волоске уже, а это совсем никак не могу понятьосвоить.
не, ну так-то будет, но это не сказать шобэ оптимизация, даже микро
http://pastebin.com/MdTbgJWY
начало тела цикла во втором случае - это IL_0013. конечно пришлось добавить еще пару строк, где происходит первая инициализация Struct. не то, чтобы я сильно знал MSIL, но очевидно, что фактическая разница - в двух инструкциях. учитывая то, что выделение памяти это просто наращивание указателя, выигрыша ты тут не получишь.
>>900727
> протолкнуть
копать в структуры данных, а именно - в стек и в связный список. еси знаешь шо это такое и зачем нужно, то проблем не должно быть
а если нет, то полистай Essential Algorythms
push() - сохраняет элемент в начале списка
pop() - возвращает значение из первого элемента списка и удаляет его
в той книге на псевдомове программирования разобран пример построения стека на основе связного списка. не думаю, что ты сильно туп дабы не осилить это со второго раза. а если да, то ничем тебе не могу помочь
а так можно?
Завтра нужно сдавать курсач и гуглится моя проблема как-то не так
суть в чем, есть пикчебокс
pictureBox6.Image = Image.FromFile(@"C:\Users\User\Desktop\History Test\History Test\History Test\bin\Debug\test\vopr\vopr" + numq + ".jpg");
как можно переделать путь к, чтобы он был относительно папки с самой программой? без вот этих дисков, юзеров и.т.д
а то прога не то что с флешки, с другого пользователя на пеке не запускается))))))
"папканейм/файлнейм"
будет гуглить файл относительно директории запуска приложения. в твоем случае это с:/всяхуйня/бин/дебаг
Как что-то плохое :3
да, дебаг. я хотел еще с optimze скомпилить, но суть-то была в поиске разницы
Ебанат здесь ты и безграмотная моча-пидорок, которая посты трет. Конечно, неприятно ощущать себя безграмотным дебилом, надо пост потереть.
(Автор этого поста был забанен. Помянем.)
Нужно копировать файлы определенных расширений из одной папки в другую (7 разных типов файлов).
GetFiles() принимает только одну маску.
Как лучше получить сразу все типы файлов?
http://pastebin.com/wR6u9vN5
Написать функцию, принимающую массив масок? И вызывавать GetFiles для каждой?
таки нет, не для этого случая
интернеты говорят по-разному - от конкатенации результатов до фильтрации всех файлов в директории
Таки что лучше использовать? Файлов очень много. Что будет менее затратно?
http://pastebin.com/ZmvV5v3p
а v2 и v3 чем-то отличаются лол?
еси ты явно указываешь IEnumerable<FI>, как в версии2, то лучше использовать метод EnumerateFiles. вообще, смотря
> Файлов очень много
что ты подразумеваешь. если файлов много, а под один фильтр попадет, в лучшем случае 5-10%, то лучше вариант номер раз. если же бОльшая часть общего контента окажется в результирующей выборке, то тащи из DirectoryInfo все. универсального рецепта нет в этом случае
и вместо string[] HashSet<string>, хотя если всего 2 расширения, не знаю даст ли это хоть сколько заметный прирост.
Слушай Лысого сука и будешь С# богом.
Почему бы и нет?
Копейки.
На данный момент пробовал:
1. в настройках фаервола создал правило для devenv.exe на все входящие/исходящие подключения
2. удалил/устанавливал повторно NuGet
3. Пробовал использовать адрес NuGet'овского CDN для VS2013
ничего не помогает. Гугол тоже молчит. Раньше NuGet работал (не помню, когда в последний раз использовал, но я помню, что работал).
Bump
Господа, поясните за локатор в MVVM Light, как его использовать и зачем? не могу найти руководство для совсем дибилов а описания для понимания не хватает.
Знаю что система автоматически выносит объявление переменной за цикл. Такой вопрос, если у меня есть в цикле вызов метода, будет ли она также выносить объявления конст/обычных переменных за рамки данного цикла, или нет?
транслируй в MSIL и смотри сам
> выносит объявление переменной за цикл
ты про i в цикле (for var i = 0...)?
> если у меня есть в цикле вызов метода, будет ли она также выносить объявления
причем тут метод? я четота не догнал?
> выносить объявления конст
константы находятся в метаданных, вангую, что такая же ситуация характерна и для методов (но не уверен)
> обычных переменных за рамки данного цикла
чуть выше я ildasm-ом для другой ситуации приводил листинг. так там никакого выноса переменной, что создавалась внутри цикла, не было
Сейчас разверну что я имел ввиду.
Есть такой например код цикла:
for(...) {
var variable = 333;
...
}
После трансляции, он будет таким(по смыслу):
var variable = 333;
for(...) {
...
}
Не то, чтобы переменная variable поменяет свою область видимости, а в плане что инициализация будет происходить единоразово.
А затупил я над следующей ситуацией:
for(...) {
someMethod();
...
}
... someMethod(){
var variable = 333;
...
}
Дак вот какого будет поведения переменной variable, вынесется ли её инициализация до цикла или нет.
Сейчас разверну что я имел ввиду.
Есть такой например код цикла:
for(...) {
var variable = 333;
...
}
После трансляции, он будет таким(по смыслу):
var variable = 333;
for(...) {
...
}
Не то, чтобы переменная variable поменяет свою область видимости, а в плане что инициализация будет происходить единоразово.
А затупил я над следующей ситуацией:
for(...) {
someMethod();
...
}
... someMethod(){
var variable = 333;
...
}
Дак вот какого будет поведения переменной variable, вынесется ли её инициализация до цикла или нет.
> вот какого
какое*
Будь это плюсы, я бы переопределил оператор присвоения и посмотрел как оно работает. Но в шарпике нельзя трогать данные операторы. Точно знаю что даже старые компиляторы плюсов, оптимизируют первую ситуацию, для системных типов. На счет второй уже не помню.
Сук, не дописал.
Я вообще не бум бум за дотнетовский байткод, чтобы в нем посмотреть результат трансляции простого примера, думал может знает кто. Если нет, то к выходным может сам осилю. Прочекать поведение для базовых системных типов и пользовательских соответственно.
Я сейчас конечно адово шуткану, но попробуй запустить студию из под администратора.
Мимо SharpDevelop-холоп с вопросами трансляции.
первая ситуация - это не более чем оптимизация статического конпелятора.
нащщот второй от ситуации и того, как метод будет использоваться и какова будет статистика метода/цикла - может включиться встраивание метола, может повторное использование кадра стека, может еще чота. я однозначного ответа на это не могу дать, но можно попробовать поэкспериментировать
Идея нумер два. Вместо https вкорячь http. Основы гугл-Fu https://github.com/NuGet/Home/issues/2880
>>902118
Принято. Я реанимирую свои познания по программированию, и вот при работе со строками задумался над оптимальными реализациями своих методов. Будет ли он строки выносить, или нет. Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же, для констант свое поведения прописано. Короче, не понятно мне. К выходным может проверю какие оптимизации происходят при компиляции
Nyet. Та же самая ошибка, только порт указан 80 вместо 443
Общее количество файлов 11566. В выборку попадает 7014. Получается в моём случае лучше использовать версию 2, так как в выборку попадет более 60%?
>>901484
>>901525
>явно указываешь IEnumerable<FI>, то лучше использовать метод EnumerateFiles
>Лучше вместо GetFiles() использовать EnumerateFiles() + Where().
Я как понял, EnumerateFiles() это lazy-вариант GetFiles().
Есть ли разница, с чем использовать EnumerateFiles() с FileInfo[] или IEnumerable<FileInfo>?
Какие подводные камни, если использовать EnumerateFiles() с FileInfo[]?
>>901531
>хотя если всего 2 расширения
Не 2. 7 различных типов файлов.
public class G<T> where T:Base
{
public T Prop {get;set}
}
Как правильно работать с разными классами этого семейства (т.е. T принимает разные значения) в обобщенном стиле? Я ввёл интерфейс c cвойством базового типа:
public interface IGBase
{
Base PropBase {get;set}
}
и добавил реализацию свойства в исходный генерик:
public base PropBase
{
get { return Prop; }
set { Prop = (T)value; }
}
Всё правильно сделал? Оно работает, но есть ощущение говнокода и нарушения высших принципов проектирования.
> файлов 11566
> в выборку попадет более 60%
не то шобы чуть более, чем половина - это какой-то вменяемый критерий. наоборот, середина - самая жидкая граница, ни туда ни сюда
> EnumerateFiles() это lazy-вариант GetFiles()
ох, если бы
EnumerateFiles() - это:
return FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
GetFiles() - это:
IEnumerable<FileInfo> enble = FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
List<FileInfo> fileList = new List<FileInfo>(enble);
return fileList.ToArray();
субъективно мое мнение - для 12к файлов использовать несколько EnumerateFiles() с последующей конкатенацией. если расширений будет добавляться, тогда пичаль, надо будет сравнивать бенчмарки
>>902124
> Будет ли он строки выносить, или нет
ну все зависит от использования этих строк. не value/reference type влияет на такие вещи
> Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же
как-то сильно по-школьному. строки - это массив чаров, правильнее говоря - char*. вроде бы как через unsafe они вполне себе изменяемы. дело в том, что нет безопасных прямых средств для работы со строкой как с изменяемым объектом. следовательно,
> для констант свое поведения прописано
тут не канает
>>902140
есть интерфейс, работающий изначально с Base. есть дженерик-класс, работающий от конкретной реализации Base в отдельно взятой ситуации. т.е. если:
public class Impl : Base {}
и ты используешь оба варианта:
((IGBase) someobj).PropBase = new Impl()
и
new G<Impl>().Prop = new Impl(),
то в первом случае потребитель интерфейса нихуя не шарит в том, Impl это либо другая реализация, в то время, как G<> четко знает, что работа производится с нужной реализацией. соответственно, тебе в первом случае нужно будет явно кастить и потенциально обсираться с InvalidCastException.
но в чем вопрос, я не понял. и нахуя делать отдельно интерфейс и абстракцию, причем по-разному
> файлов 11566
> в выборку попадет более 60%
не то шобы чуть более, чем половина - это какой-то вменяемый критерий. наоборот, середина - самая жидкая граница, ни туда ни сюда
> EnumerateFiles() это lazy-вариант GetFiles()
ох, если бы
EnumerateFiles() - это:
return FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
GetFiles() - это:
IEnumerable<FileInfo> enble = FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
List<FileInfo> fileList = new List<FileInfo>(enble);
return fileList.ToArray();
субъективно мое мнение - для 12к файлов использовать несколько EnumerateFiles() с последующей конкатенацией. если расширений будет добавляться, тогда пичаль, надо будет сравнивать бенчмарки
>>902124
> Будет ли он строки выносить, или нет
ну все зависит от использования этих строк. не value/reference type влияет на такие вещи
> Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же
как-то сильно по-школьному. строки - это массив чаров, правильнее говоря - char*. вроде бы как через unsafe они вполне себе изменяемы. дело в том, что нет безопасных прямых средств для работы со строкой как с изменяемым объектом. следовательно,
> для констант свое поведения прописано
тут не канает
>>902140
есть интерфейс, работающий изначально с Base. есть дженерик-класс, работающий от конкретной реализации Base в отдельно взятой ситуации. т.е. если:
public class Impl : Base {}
и ты используешь оба варианта:
((IGBase) someobj).PropBase = new Impl()
и
new G<Impl>().Prop = new Impl(),
то в первом случае потребитель интерфейса нихуя не шарит в том, Impl это либо другая реализация, в то время, как G<> четко знает, что работа производится с нужной реализацией. соответственно, тебе в первом случае нужно будет явно кастить и потенциально обсираться с InvalidCastException.
но в чем вопрос, я не понял. и нахуя делать отдельно интерфейс и абстракцию, причем по-разному
не дописал
CreateFileInfoIterator делает соме маджик. на косой взгял на реализацию, там нечто вроде state-machine как для yield блоков. если это действительно так, я бы советовал по возможности юзать этот вариант. а если нет и при первом обращении итератора формируется конечная коллекция, то хуй знает
Это я знаю, что можно тривью с чекбоксами сделать. Я не хочу что бы ветка тривью раскрывалась в километровую простыню, так как сабайтомов может быть более 1000. А так бы я отображал в листбоксе, присобачил бы туда виртуализацию и все было бы чики бамбони Пока сделал открытие сабайтемов в отдельном окне с чекедлиствью.
То что я назвал Base это иерархия классов модели, там лежат данных и я эти классы не контролирую, не могу ничего поменять. Мне надо к каждому такому классу прикрутить сериализацию, что бы потом гонять их по разным каналам. Идея была в том, что бы создать базовый генерик с параметром класса наследника Base, там будет общая инфраструктура, каждй наследник генерика будет имплементировать сериализацию. Было все хорошо, сами генерики выглядят красиво, но понадобились функции работы с наборами разных наследников этого генерика, так что пришлось выделять интерфейс. Например требуется записать список наследников Base, я по ним получаю из фабрики набор соответсвующих генериков-обёрток приведенных к интерфейсу, но их свой свойство Prop только что из фабрики ещё чистое, его нужно заполнить исходным Base переданным клиентом. Вот тут и возникает необходимость апкаста. Я так понял это неустранимо, в моем решении нравится что апкаст только один и изолирован в одном местею. Но в целом всё кажется каким-то кривым.
Если ты хочешь DataContext в XAML'е заводить, то нужно в ресурсах не раньше grid'а объявить объект твоего VM с ключом, и потом самому гриду DataContext присваивать через
...DataContext="{StaticResource myVM}" />
А так он у тебя нихуя не увидит, ты ведь даже не объект какой то привязываешь, а просто название класса.
Сук, так вот почему у меня конструктор VM не вызывался. А как правильнее всего сделать?
и все-таки https://msdn.microsoft.com/en-us/library/ms230818.aspx эти колбэки использовать?
других стандартных средств профилирования Core я вообще не видел
Ну, формально, в WPF предполагается как можно больше кода, связанного с View и ViewModel оставлять в XAML'е. Однако, довольно проблематично объявлять VM в кзамле, если у тебя конструктор с параметрами. я вот ващпе не парюсь и в c# коде объявляю.
одна строчка роли особой не играет.
Видосик 1:02:17 https://www.youtube.com/watch?v=x0udrpe_gZE
Запрос в гугл What is the difference between objects and classes in C#?
как правило, если ты говоришь instance, ты подразумеваешь, что это некий член некого конкретного типа, имеющий место в адресном пространстве (куча/стек/регистры/etc), если ты говоришь object, то это: a) инстанс System.Object, б) некая абстрактная нёх, назначение которой зависит от контекста
> для шарпа объект это статические мемберы в хипе, он появляется при создании первого инстанса класса и остается один(а инстансов может быть много)
судя по всему, описывается тип, а это
> появляется при создании первого инстанса класса
вообще безграмотная хуйня какая-то
при первом обращении к типу вызывается статический конструктор онли, но он не порождает объект и не создает нихуя физического
рантайм узнает о типе после инициализации (компиляции) его JIT-компилятором, но эта компиляция происходит не совсем в "момент первого обращения" или "первого создания"
Короче, видос хуйня? Или ты не смотрел, просто написал? Мне бы пруф из какого-то источника именно про С#, если есть.
clr via c#
я прокомментировал твою цитату, естессно, я не смотрел и ничего по поводу видео не написал и не буду это вот час смотреть ради рецензии
> Мне бы пруф из какого-то источника именно про С#, если есть
это исключительно вопрос внутреннего понимания собеседников
"документация" https://msdn.microsoft.com/en-us/library/ms173110.aspx говорит:
> An object is basically a block of memory that has been allocated and configured according to the blueprint. A program may create many objects of the same class. Objects are also called instances, and they can be stored in either a named variable or in an array or collection.
Тут варианты проскакивали http://razbor-poletov.com/2016/11/episode-121.html
Если ты такой отбитый, можешь прослушать 2 часа.
ЛОЛ ты угораешь? То что он рассказывает обязан каждый школьник знать не то что программист. Если ты не осилил что в 1 байте 8 бит то о чем вообще говорить, Лысый как раз хороший вариант если ты тупой, но хотите вкатиться
Это копия, сохраненная 30 января 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.