Это копия, сохраненная 17 декабря 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Шапка: https://github.com/CSharpShapka/SharpHat/wiki
(пока просто перенесена шапка из ОП-поста, в ближайшее время приведу к более-менее адекватному виду, не стесняйтесь слать свои пулл-реквесты)
Прошлый тред тонет здесь: https://2ch.hk/pr/res/856099.html (М)
как нормально регистрировать зависимости абстракций и реализаций в нормальных приложениях?
если, допустим, есть:
ClientApp
_BllCoreLib
_BllImplLib
__DalCoreLib
__EfDalImplLib
__RedisDalImplLib
где, соответственно, Client не знает о Impl-ах, а работает только с интерфейсами Core-ов?
на моей памяти либо юзали XML-конфигурации, либо всю регистрацию впихивали в Shared-проект, откеда доступ был всему от всего. но нормальные ж люди как-то делают адекватно все это?
мне нужен подход, по которому я, не нарушая целостность и изолированность слоев в n-tier приложении мог бы использовать это самое di/ioc
возможно я что-то не понимаю, но например в одном проекте ты пишешь что-то типа
container.RegisterGeneric(typeof(BaseRepository<>))
.As(typeof(IRepository<>))
.InstancePerDependency();
а в проекте уровнем выше резолвишь эту поеботу.
container.Resolve<IRepository<Foo>>();
возьмем самый простой пример: вебапп->проект бизнес-логики->проект доступа к бд. в каждом из них есть свои публичные интерфейсы, от которых зависит проект цепочкой выше, и конкретные реализации, которые зависят от 3-пати либ
мне, для того, чтобы зарегистрировать irepository as myrepository надо: либо протянуть от вебапп к dal метод, который бы проводил регистрацию (что, по меньшей мере, чревато наличием в вебапп зависимостей от библиотек, которые использует ДАЛ, ну и доступ к интерфейсам этого проекта в придачу; либо вынести всереализации в четвертый шаред-проект и с помощью билд-ивэнтов или еще какого-нибудь шаманства, скопировать библиотеки в ин веб приложения (подход так се, не взирая ни на что). более адекватным решением я видел использование возможностей xml-регистрации зависимостей. но тут приходится зависеть от строковых значений, левых файлов и, вообще, не всякий инжектор так умеет.
самое нормальное решение, что я попробовал найти, это использование mef для поиска компонентов, осуществляющих регистрацию зависимостей. все-равно придется прибегать к шаред-проекту и устанавливать в нем зависимость от di-библиотеки. но хоть так
буду за компуктером, поделюсь ссылкой
Dependency Injection in .NET охуенная книга на эту тему. Автор там как раз примеры дает того, как использовать это все в разных приложениях.
По ощущениям это даже не огрызок окамла — это С# с лицом ML. Как фп язык это самый кривой огрызок потому что в первую очередь это ООП язык, вся инфа гуглится да и сам понять должен если работал раньше хоть раз с тем же окамлом. собственно цена за возможность полного интеропа с шарпом и остальным дотнетом, который в той же скале по обратным причинам очень кривой
Если же тебе нужен сшарп с почти полноценным выводом типов, паттернматчингом и кастрированным адт и возможностью писать дсл прям "на лету" как в скале — в целом неплохо. То же самое и по перформансу — именно код в функциональном стиле дотнет оптимизирует очень слабенько.
описанного у рихтера тебе недостаточно? может ты что-то конкретное хочешь узнать?
>>870529
что такого тебе постоянно подсказывает тебе решарпер, что ты не можешь отказаться от него? подобное говно приводит к привыканию, потом еще надо постараться написать полтора класса без указок
использую решарпер, в основном, как навигатор + быстрый добавлятор usingов
Юзинги, циклы в методы расширения, ну и мелочи всякие типо лишних скобок в условиях
– Вы планировали выпустить релиз (Rider) осенью. Получится?
– Увы. Пока планируем релиз на начало следующего года. Продукт будет платный, и нам не хочется стыдиться того, за что берем денежку.
Пиздос. Ещё месяца три релиза ждать.
как выгрузить файл на гугл диск иди другое хранилище? Пробовал использовать WebClient.UploadFile(ссылка, которая успешно работала при загрузке файла с диска,путь к файлу); но нифига не вышло
использовать либы, желательно от производителя
В треде об ФЯП писал, тут повторюсь.
На работе пишу на нем скрипты в linqpad, вместе с type providers ваще огонь для всяких одноразовых интеграционных задач.
Сборка мелких проектов на FAKE - там относительно удобный dsl и много чего из коробки.
Пет-проекты на нем пилю, оче нравится.
В нем есть все, что есть в c#, кроме unsafe, так что проблем особых не вызывает.
Что за монадки и как ими пользоваться я понял после чтения статей на fsharpforfunandprofit до этого прочтя кучу статей про монады в хаскеле и ничего не поняв, Скотт отлично объясняет. Появилась зависимость.
Выведение типов делает меня плакать при возврате к написанию кода на c#, композиция функций делает код компактнее, АДТ позволяют лучше моделировать предметку, паттерн-матчингом красиво пишутся сложные для if-else и switch-case условия.
Там же в треде про ФЯП мне пояснили, что F# говно по сравнению с другими языками ml-семейства, но я на них не писал, по-этому не страдаю особо.
На hh изредка появляются вакансии, где он желателен была вакуха в касперском, сейчас мдмбанк, но чистых фшарпистов последние 2 года точно не искали.
Пробовал:
FirefoxProfileManager myProfile = new FirefoxProfileManager();
var profile = myProfile.GetProfile("C:\\Users\\anon\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\anon.default");
var driver = new FirefoxDriver(profile);
Запускается все равно на новом чистом профиле.
может быть надо имя профайла указывать
FirefoxProfileManager myProfile = new FirefoxProfileManager();
var profile = myProfile.GetProfile("anon");
а не путь до него
Что не так?
Несмотря на всю простоту концепта, очень многи умудряются проебаться и нахуярить сервис локаторов, которые конфигурируются через xml.
все эти концепты, шаблоны, подходы имеют красивое и лаконичное до нельзя назначение, но как реализуешь все в проекте, начинается блять
Вот на подходе .net core - он будет давать делать только webapi/mvc проекты? А если, например, хочу что то для линя написать на шарпе то это ксамарин/моно? Ещё видел презентацию, где шарп компилили в нативный исполняемый файл в убунте. Я запутался что и для чего нужно. Объясните.
.net дает тебе возможность писать только asp.net проекты?
Что-то вроде этого? Подставь просто в замену нормальный символы какие тебе нужно, а не строки как у меня и норм по-идее.
https://dotnetfiddle.net/lZXRAr
Да, спасибо, кажется это должно работать. Пиздец я тупой и не додумался до этого сейчас, хотя совсем недавно именно это и делал.
Пробовал, все равно не взлетает
http://blog.stephencleary.com/2012/02/async-and-await.html - вполне себе годное объяснение.
tl;dr
Если ты вызываешь асинхронный метод через await, то выполнение данного метода приостанавливается до тех пор, пока асинхронный метод не вернет какой-то результат. В это время - пока мы еще ожидаем выполнение этого метода - управление передается вызывающему контексту(благодаря этому ты можешь нажимать на кнопочки на форме / веб-интерфейсе, пока на сервере еще выполняется выполнение асинхронного метода). Как только асинхронный метод завершает свою работу, то метод, который ожидал завершения его выполнения просто продолжает свою работу. А нахуй это нужно - для удобства разработчика, т.к. создавать потоки и самому всей этой хуйней управлять не очень удобно, асинки - напротив, просты в освоении и предоставляют уницифированный интерфейс для работы.
>управление передается вызывающему контексту(благодаря этому ты можешь нажимать на кнопочки на форме / веб-интерфейсе, пока на сервере еще выполняется выполнение асинхронного метода)
Да это я понял, а в то время когда вызывающий контекст возвращается к работе, и если там не просто какие-то кнопочки тыкать, а сложные длительные вычисления происходят, в это время тот код который начал работу в асинхронном методе не выполняется, а ждет пока эти вычисления закончатся?
Допустим, я сортирую внешней сортировкой 1ГБ файл.
Зачем тут использовать mmf? Когда можно просто построчно читать файл, скидывать в новый файл, сортировать внутри, потом сливать все файлы.
Да, если ты вызываешь этот метод через await, то код в этом методе ждет завершения асинхронного метода.
Кажется, ты не про то ответил, я хуево написал. Код, который вызвал метод, в котором есть await, продолжает выполнятся сразу после вызова метода через await, а метод, вызванный через await, ждет завершения этого кода? Они же не могут параллельно выполняться, так как находятся в одном потоке.
Нет, он будет ждать завершения работы метода в котором await есть. А вообще чтобы вызвать этот метод, в котром есть await, ты должен будешь его вызывать либо через await (т.к он помечен как async), либо завернуть это дело в Task.
Хотя я может быть напиздел по поводу того, что он ждать будет. Сейчас нету возможности проверить, так что либо у себя попробуй хули ты сразу не проверил? это ж 5 минут , либо жди пока кто-то поумнее появится.
Вот супер схему запилил. На первой M1 и m3 же не могут одновременно работать, так как у нас нет нескольких потоков (или есть (???)).
На второй m3 ждет, когда M1 выполнится. Вторая верна или нет?
Не, параллельно они не будут выполняться. Во втором случае m3 будет ждать, когда m1 выполнится.
Вот кстати наглядный пример с объяснением даже - http://ru.stackoverflow.com/questions/316990/Как-работают-await-async
мимо третий
какую-то ты еболу намалевал на своей картинке, сам запутался и у других ответа не получишь
https://m.youtube.com/watch?v=lh8cT6qI-nA
здесь все должно быть яснее
насчет супирпупир длительных операций: если это IO операция, она практически гарантированно уйдет в другой поток. если нет, CLR может вполне легально принять решение о переводе операции во многопоточность, если оно затягивает выполнение
>Во втором случае m3 будет ждать, когда m1 выполнится.
Ну так и нарисовано. В таком случае это просто последовательный код, в чем тогда суть?
По ссылке я читал уже, нихуя не понял.
Вот с той же ссылки пример, его запустил, он почему-то выполняется параллельно.
Так логично, что параллельно - у тебя метод My вызывает без await'a, а для этого тебе нужно возвращать Task или Task<T> из метода My.
Спасибо! Тут вообще какая-то неразбериха с потоками, почему-то только кек уходит во второй поток, а все остальное в одном делается. Ладно, мне не дано понять, посмотрю лысого дядю >>873711 и пойду баеньки. Бобра вам.
ну таск.ран работает в принципе чуть по-другому. я еще проебался, надо было бы вызвать Result у асинхронного метода, там тоже CLR может принять решение о выполнении задачи в потоке
Алло ;(
>CLR может принять решение о выполнении задачи в потоке
>CLR может
Что-то у меня бомбит от этого.
Ты так говоришь, будто при разработке не знаешь как будут выполняться таски.
ну как и execution plan субд - насчитает одно, но есть вероятность, что выполнится другое
Самый простой вариант: Пилишь простое windows service приложение, которое будет брать ссылки на треды из какого-нибудь файла и будет парсить треды вытягивая оттуда картинки (пожалуй с парсинга и вытягивания начни), а потом просто сохраняешь себе на диск. Ну и работать сервис через таймер будет какой-нибудь, который автоматически ьудет перезапускаться.
Ну или еще проще: пилишь веб-приложение с одним инпутом, куда забиваешь ссылку на тред ну и дальше все точно так же (парсинг, еботня и все это), но эта хрень сама естественно не будет сама перезапускаться и ручками придется.
>прогу, сохраняющую все картинки с треда
>В какую сторону копать?
Главное - прикрути функциональное программирование задача позволяет.
Можно запрашивать с двача данные в формате JSON. Благодаря этому, ты сможешь избежать жопной боли при парсинге данных.
Вот как запросить данные:
https://2ch.hk/pr/res/869105.json (М)
Нихуя не понятно? Зато всю эту поеботу можно легко ковертировать к нормальному формату.
Итак. Получаешь эти данные ручками, потом пиздуешь на http://json2csharp.com/ и вставляешь JSON, который ты получил.
На выходе получишь систему классов, которая получается при конвертировании этого JSON к формату шарпа. Видишь класс RootObject? Это и есть корневой элемент, который вернёт тебе двач.
Затем тебе нужен пакет Newtonsoft.Json. Эта либа, которая позволит тебе конвертировать твою JSON-строку к полученному формату. Поставь её через Nuget, командой Install-Package Newtonsoft.Json в консоли студии.
Как с этой поеботой работать:
var huiPizda = JsonConvert.DeserializeObject<RootObject>(response);
Что может быть проще?
Затем ебись с полученными данными, как хочешь. Там есть класс Post, он в себе содержит информацию о файлах. Дальше сам разберёшься.
Прошу прощения, но я немного обосрался. Судя по всему, тебе придётся немножко поебаться с сериализацией, т.к. эта поебота не сконвертировала то, что тебе нужно.
Значит смотришь на мой предыдущий пик и создаёшь класс File, который содержит в себе все свойства с пика (то, что лежит внутри переменной 'files'). Обрати внимание, что регистр свойств и тип переменных должен совпадать, чтобы конвертер не послал тебя нахуй.
Затем вместо object подставляешь этот File в текущем пике.
1) хочу написать UWP приложение под десктоп/мобил/xbox
for fun. Где посмотреть хелло ворлд? С чего вообще начать? Т.к. предвижу winforms мне не совсем нужен будет
2) Много ли платят в отрасли? Я имею ввиду мне сейчас платят 2к евро дистанционно и сижу на жеппе ровно. Будет ли существенный прирост? В пыхе есть частые халтурки и можно работать из дома. Плюс работы очень много.
Смогу ли я найти на апворке или на тематических форумах таски по быстрому если научусь кое как говнокодить?
3) Если ответ на 2ой вопрос положительный. Во что развиваться? В .ASP, .NET или Xamarin чтобы опять же сидеть на жеппе так же ровно и получать бабло?
4) можно ли писать легковесные и шустрые приложухи на .asp или это не поворотливая хрень?
Всем добра
Лол, а вопрос как распарсить страницу это совсем дниве? Прост я до этого только в Юнити хуярил.
1) начни с http://metanit.com/sharp/
2) не сказал бы, что .NET фриланс прибыльней/перспективней, чем рнр (ИМХО). одновременно с этим не сказал бы, что .NET дешевле (мне в помощь статистика на ДОУ, как дела в реальном мире, могу только догадываться)
3) MVC/WebAPI все еще живут, ASP.Core, если выстрелит, то будет крутяковым перспективняком. ну а так остается Xamarin и WPF. мобильные, ясен пень, имеют бОльший вес на рынке
4) если завязываться на IIS, то, в целом, все будет достаточно слабоповоротным (хотя бы благодаря инфраструктуре). но белые люди придумали OWIN, ~Core работает через Kestrel - короче, есть достаточно легкие вещи в окружении
>Что может быть проще?
Вот это >>873978 (плюс это работает и на 4chan и еще где угодно)
Ты блин усложнил, ему надо картинки скачать, а ты прилагаешь писать клиент двача.
api/кодогерация - в интерпрайзе что ли работаешь?
>PHP макак вкатывается в тред
>сидеть на жеппе так же ровно и получать бабло?
Попробуй nodejs без шуток, опыт знакомста с php мартыханами - говорит что он не способны работать со статической типизацией
>WPF
мерт вместе с winforms (а если и применяется где-то, то лучше сразу сдохнуть)
>MVC/WebAPI
Галеры на кровавый тырпрайз по поддержке кода написанного 10 лет назад индусами
>ASP.Core
Единственное перспективное направление, но фиг работу найдешь
> мерт вместе с winforms
to be honest - нет
естессно, писать впф тебе скажут только в одном шансе из 10, но и не каждый пишет на c++, что не мешает ему не быть мертвым
моя охуевшесть была охуевшей, когда выкатили работоспособное и (относительно) перспективное приложение на Silverlight
> по поддержке кода написанного 10 лет назад индусами
от этого никуда не денешься
Да, если нужна поддержка форча и не нужна будет сложная логика, то твой вариант будет проще в использовании. Только там ещё надо будет проверить, что ссылка оканчивается на .jpg/.png/.bmp, т.к. ему только картинки скачать надо.
Нет. Поддерживаю всякое говно (Xamarin, Ionic, бэкенд на шарпе без тестов и архитектуры) на удалёнке в мухосранске за 20к, арендую однушку за 14к. Хуже меня уже нет.
>не каждый пишет на c++, что не мешает ему не быть мертвым
Я думаю с учетом ОС/игр/браузеров там на много порядков больше разработчиков
>>874025 >>874026
Вы нашли друг друга не печальтесь вы еще молодые и шутливые, у вас все в переди.
>надо будет проверить, что ссылка оканчивается на .jpg/.png/.bmp
Массив SupportExtensions в строке 5
> на много порядков больше разработчиков
сомневаюсь
> Вы нашли друг друга
я ж не говорю, что продолжаю это делать о сих пор
Работа с большим файлом
Если нужен код для парсинга конкретного сайта, то регулярные выражения.
Этим говном еще кто-то занимается в 2016? Я сам этого не делал, но слышал, что в плане производительно это та еще жопаболь, как и в плане сложности.
Хтмл не парсят регулярками, дурной тон.
Справочник по c# 6.0
И если да, то зачем в Троэлсене столько рассказывается про подключенный и автономный уровни?
1 абсолютно не только
2 уметь пользоваться только хай-левел фреймворком без представления об основах, которые составляют его базу - признак макакена
Я бы не сказал. В реальности за место EF может использоваться какая-нибудь микро ORM вроде linq2db или dapper, где ты будешь сам писать запросы. А если EF и используется, то часто он служит лишь для мэппинга на DTO сущности и структурирования баз по отдельным классам, а при работе с таблицами вся работа производится через чистый sql, ибо то, что генерирует EF при обращении к БД очень сильно бьет по производительности.
Ананс, зачем тебе целый проект под DAL?
Или ты собрался менять EF на Dapper? Шо прям хайлоад назрел и EF не справляется?
Все равно на NoSQL быстро переехать не получится - тебе домены прийдется перекраивать, что на рабочем солюшене стоит дорого.
Ну посмотрим, сколько денег. 15 пока отлично справляется, интересно, чем заманивать собрались.
"он будет давать делать только webapi/mvc проекты?" - не только - еще console app.
Для линя, что ты на шарпе хочешь писать и главное нахуа?
Core CLR - basement для web way - довольно плотно конкурирует с UAP и они перенимают друг у друга некоторые концепции и реализации, в свою очередь UAP много берет от Mono - тот же AOT вместо JIT. Но все подводится под .NET Standard.
А чего б и не?
Нужно понимать хотя бы на 1 уровень абстракций ниже, чем тот на котором ты пилишь.
Или переехал ты на другой проект, а там NHibernate и все, ты обосрался, потому, что базовых концепций не знаешь.
>UAP много берет от Mono - тот же AOT вместо JIT
mono aot кто-то реально пользуется или это просто концепт с демками?
Нет не концепт, реально работает - arm архитектура -> Hololens, IOT вот это вот всё.
Кроме iOS конечно, там не было выбора и это не интересно.
Я имел ввиду для десктопа к примеру.
>>874444
>Hololens, IOT
mono на хололенс? можно ссылочки на рабочие проекты (или это только теория)?
> нахуа
потому, что можно
>>874408
ну идея бизнес-логики в контроллерах меня слабо привлекает. и из ДАЛа у меня не только рсубд: есть граф, есть файл-сторедж. чтобы по фен-шую без слоя не обойдешься
ну и да, с ЕФ я, в перспективе хочу слезть. а лучше вообще в постгрес какой-нибудь сраный
ну и юнит-тестирование, окакжэ
проект для себя, хочется идеала, хотя уже не получается
На Hololens не моно, а UAP. UAP взял у Mono AOT.
Но там честно говоря звиздец. Нормальной рефлексии нету, а соответственно Automapper, IoC работают с ограничениями. Ну и вёрсточка UI там неебовая.
Я не писал про бизнес-логику в контроллере. Бизнес логика в бизнес слое. Но смысла с репозитория при использования EF не вижу. EF даёт нормальную абстракцию IQueryable.
Честно говоря, я не вижу смысла с юнит-тестов которые проверяют в бизнес-слое создание объектов без сохранения в базе - я ж так понимаю, ты мокаешь свой репозиторий.
В рантайме, если запрос в EF кривой все и развалится, при работающих юнит-тестах.
НУ плюс адекватно построение связей не протестишь. По-моему. если замешано использование БД, тут уж без интеграционных тестов не обойтись.
ну, я не пишу repository<t> поверх dbset<t> и unitofwork поверх dbcpntext, но ведь какой-то слой command/query должен же быть дабы переиспользовать функционал?
Я не хочу быть макакеном, в Троэлсене читаю всё подряд, правда
Почему программистов всегда изображают в виде няшненьких в плохом смысле слова бородатых толстячков-патлачей в очках?
Я дрыщатик-патлач.
да в шараге задание дали, реализовать коллекцию. Короч, как встроенные коллекции, только методы и свойства своими руками. Я так понял...
берешь, короче, рефлектор, смотришь в System.Collections имплементацию любой понравившейся коллекции. упрощаешь по вкусу и гришь преподу мол "смотри старый хрыч с указателями заебашил и с IL".
по сути, выбора немного: либо с использованием массива для хранения элементов (при этом твоей задачей будет контролировать длину массива и переинициализировать его в случае переполнения); либо через связный список
А дерево ебануть слабо? Черное, красное, АВЛ, с проходами прямыми и обратными, вглубь и в ширину, бинарное и произвольное. Фантазия безгранична здесь.
Вы ебанутые? В чем прикол учить net в 2016, когда есть java, где все тоже самое только еще и linux runnable? вы сами себя ограничиваете
ну дык реализацию дерева придется все-равно делать на основе однонаправленного связного списка. только связей будет не одна, а несколько
можно массивом, наверное, но я хз, насколько это эффективно
Вообще то наоборот, как язык C# гораздо мощнее Java и уже без костылей запускается на Linux/macOS.
Я допустим пишу на нем бэкенды (CoreCLR + EF Core) для своих мобильных проектов и деплою на дешевый ubuntu vps.
может быть он находится в неведении
1. В бд имеется поле дата типа date. При отображении в гриде дата принимает формат со временем (пик). Как пофиксить?
2. Как задать заголовкам столбцов дружественные имена. Через маппинг не получается.
http://pastebin.com/8YvyWSne
Прошу у вас помощи. Я установил Android SDK ещё когда устанавливал Android Studio, потом решил писать на C# и скачал Xamarin. Создаю проект, а когда пробую компилировать, вылазит пикрилейтед. Как исправить? Что я делаю не так?
Проверь, может быть в настройках студии путь к Android SDK не указан.
обнови jdk
>мерт вместе с winforms (а если и применяется где-то, то лучше сразу сдохнуть)
Winforms еще как применяется для по которое было написано больше 6 лет назад и требует поддержки и направлено на постсовок, в котором много где еще 2000 винда стоит и хр в офисах
НА SO сказали что парсят регулярками только дауны, там самый топовый вопрос с этим связан.
>в котором много где еще 2000 винда стоит и хр в офисах.
Да неее, щас же повсеместно (ЭЦП, плагины для браузеров и прочего документооборота) просят win7 не ниже, разве нет?
Код примерно такой (пикрилейтед): в цикле создаем массивы по 100К элементов (элемент - струкрура размером 56 байт), и заполняем их. Когда память кончается винда зависает нахуй. Никаких исключений, ничего.
Вопрос: как узнать заранее зависнет ли винда перед выделением и заполнением массива чтобы вообще не производить эту операцию? (виснет она судя по всему на заполнении).
Зависание происходит следующим образом:
- Диспетчер задач показывает 100% использование памяти (12 ГБ в моём случае).
- Начинает дрочиться винт, винда начитает тормозить.
- Перестают перетаскиваться окна и вообще UI, в том числе других приложений и таскбара, не отвечает.
- Диспетчер задач перестает обновлять состояние своего окна.
- Падает к хуям радио (которое еще какое-то время играет).
- Винда перестает реагировать на мышь и указатель мыши застывает. Винт продолжает дрочиться.
- Через значительное время всё затихает и наступает полная тишина. Экран продолжает иметь то же состояние когда UI перестал отвечать на действия пользователя.
Код как текст:
private unsafe void button81_Click(object sender, EventArgs e)
{
MemoryFailPoint memFailPoint = null;
int items = 100000;
MList<Cba[]> arrays = new MList<Cba[]>();
int i = 0;
Random r = new Random();
for (i = 0; i < 2000; i++)
{
try
{
memFailPoint = new MemoryFailPoint(items * 56 / 1024 / 1024);
Cba[] ar = new Cba[items];
for (int j = 0; j < ar.Length; j++)
{
ar[j].A1 = r.NextDouble();
}
arrays.Add(ar);
memFailPoint.Dispose();
}
catch (Exception ex)
{
Trace("i=" + i + " Got an exception: " + ex.Message);
break;
}
}
}
public struct Cba
{
public double A1;
public double A2;
public double A3;
public double A4;
public double A5;
public double A6;
public double A7;
}
Если кто будет тестить, то осторожно - винда виснет конкерно. У меня 12 ГБ и у меня виснет этот код на Windows 7. Если количество массивов уменьшить до 1000 (с 2000 что сейчас), то зависания нет, есть только обычный расход памяти приложением, что можно отследить по диспетчеру задач.
Код примерно такой (пикрилейтед): в цикле создаем массивы по 100К элементов (элемент - струкрура размером 56 байт), и заполняем их. Когда память кончается винда зависает нахуй. Никаких исключений, ничего.
Вопрос: как узнать заранее зависнет ли винда перед выделением и заполнением массива чтобы вообще не производить эту операцию? (виснет она судя по всему на заполнении).
Зависание происходит следующим образом:
- Диспетчер задач показывает 100% использование памяти (12 ГБ в моём случае).
- Начинает дрочиться винт, винда начитает тормозить.
- Перестают перетаскиваться окна и вообще UI, в том числе других приложений и таскбара, не отвечает.
- Диспетчер задач перестает обновлять состояние своего окна.
- Падает к хуям радио (которое еще какое-то время играет).
- Винда перестает реагировать на мышь и указатель мыши застывает. Винт продолжает дрочиться.
- Через значительное время всё затихает и наступает полная тишина. Экран продолжает иметь то же состояние когда UI перестал отвечать на действия пользователя.
Код как текст:
private unsafe void button81_Click(object sender, EventArgs e)
{
MemoryFailPoint memFailPoint = null;
int items = 100000;
MList<Cba[]> arrays = new MList<Cba[]>();
int i = 0;
Random r = new Random();
for (i = 0; i < 2000; i++)
{
try
{
memFailPoint = new MemoryFailPoint(items * 56 / 1024 / 1024);
Cba[] ar = new Cba[items];
for (int j = 0; j < ar.Length; j++)
{
ar[j].A1 = r.NextDouble();
}
arrays.Add(ar);
memFailPoint.Dispose();
}
catch (Exception ex)
{
Trace("i=" + i + " Got an exception: " + ex.Message);
break;
}
}
}
public struct Cba
{
public double A1;
public double A2;
public double A3;
public double A4;
public double A5;
public double A6;
public double A7;
}
Если кто будет тестить, то осторожно - винда виснет конкерно. У меня 12 ГБ и у меня виснет этот код на Windows 7. Если количество массивов уменьшить до 1000 (с 2000 что сейчас), то зависания нет, есть только обычный расход памяти приложением, что можно отследить по диспетчеру задач.
Впрочем похуй. Отвечайте на мой ответ. >>875622
> (ЭЦП, плагины для браузеров и прочего документооборота) просят win7 не ниже, разве нет?
Не, можно и на 2000 - хр, если десктоп приложение со вторым фреймворком.
http://www.cnews.ru/news/top/2016-11-14_microsoft_vypuskaet_visual_studio_dlya_kompyuterov
На VSCode можно только мелко-сайтики пилить, а Rider не может запускать Xamarin проекты.
У меня MemoryFailPoint выбрасывает исключение на ~200 итерации цикла, соотвественно никаких зависаний. win7 16gb
Хм, интересно, спасибо. Хотя это тоже странно, 200 итераций это около 1ГБ данных и это не должно быть проблемой. Скомпилировано под x64?
(Хотя у меня стоит any cpu, но приложение запускается как x64).
Да, стояла галочка "prefer 32-bit", что и происходило. Исключение было OutOfMemory т.е. это похоже был не MemoryFailPoint.
Если ее убрать - приложение запускалось в 64bit, исключение было уже InsufficientMemoryException, на ~2200 итерации. Свопа нет, совсем. Винда иногда предлагала закрыть приложение из-за недостатка памяти.
>Если ее убрать - приложение запускалось в 64bit, исключение было уже InsufficientMemoryException, на ~2200 итерации. Свопа нет, совсем. Винда иногда предлагала закрыть приложение из-за недостатка памяти.
Найс. Это уже другое поведение, отличающееся от моей винды. Может дело в том что она у меня пиратская?
>>875785
Все классы кроме функции Trace я выложил. Суть Trace и так ясна, это обычный текстовый вывод.
А, там я оставил MList. Вроде убирал M, странно, ну ладно. Извиняюсь. Можно заменить на простой List, там разницы не будет. MList это по существу тот же List, только с возможностью доступа к массиву напрямую, но она в коде не используется.
Бывает. А что не так?
>пиратская
Тут комментарий про эту страну и про программное обеспечение.
Ты говоришь, что у тебя диск начинает, это потому что у тебя своп включен, поэтому и винда виснет
Выключил своп и с виндой перестали происходить зависания и наконец-то стали появляться исключения. Хотя в первый раз экран погас и стал черным, после нажатия Ctrl+Alt+Del стал синим, выбрал диспетчер задач, и обнаружил что куда-то пропала Студия из панели задач. Ну и хуй с ней. В остальные разы почему-то такого не было.
В парсер надо добавить немного гибкости кастомными клиентскими скриптами так чтобы им можно было передавать объекты из приложения для обработки например.
Когда-то давно был же WHS - полез искать, а там ебать колотить сколько скриптоговна напридумали и у все это слегка различается по методам использования т.к. видимо под разные задачи заточено. Кроме WHS есть некий компайлинг на лету и подключение этой сборки (как?), есть всякие сторонние JInt-ы и подобные пэкиджи. Что из этого лучше всего использовать чтоб в парсере выполнять скрипты аля vba-код в мс-оффисе или тупо из внешних файлов/базы?
Подозреваю что вот эта компиляция на лету для дотнета ваще нативная и наиболее быстрая, но не понимаю что именно у гугла спрашивать, чтоб подробно раскуриться
В том коде что я приводил >>875622 в случае наличия свопа торможение винды начинается при заполнении массива, а не при выделении. При отключенном свопе падение происходит при выделении массива, с исключением.
В реальном приложении заполнение памяти происходит в несколько потоков. При отключенном свопе во всех потоках сразу происходит исключение OutOfMemoryException при попытке выделения памяти для массива как правило. Код потока взят в try-catch, и этот catch ловит OutOfMemoryException, при этом делая успешную запись в лог этого факта. После чего управление чаще всего не достигает точки в которой происходит ожидание окончания выполнения потоков: на первом пикрилейтеде управление не достигает строки "Log.Trace("Threads finished.");" поскольку в логе эта строка так и не появляется.
Поведение при исчерпании памяти бывает разное:
- Иногда управление очевидно таки передается в точку ожидания завершения потоков, но это бывает редко. Вычислено по паре случаев нормальной обработке всех исключений программой.
- Был случай исключения null reference exception.
- Иногда приложение исчезает.
- Иногда приложение падает с крэшем.
- Был случай "неизвестного исключения".
- В одном из случаев с винды слетела тема Aero, перед этим приложение исчезло.
- Был случай гашения экрана и исчезновения Студии (упоминался выше).
- Постоянно падает дебагер Студии.
- Невозможность запустить диспетчер задач.
- Был случай когда выпал BSOD (пикрилейтед).
На данный момент теория следующая: При исчерпании памяти когда происходит попытка выделить массив происходит исключение - такое какое и должно быть. После чего остальной код начинает работать с ошибками, т.к. память по-прежнему вся занята и он уже сам начинает получать исключения в непредсказуемых местах с непредсказуемыми последствиями, каждый раз давая разную картину багов. То что код приложения не выдерживает таких издевательств и то что аналогичное происходит с другими приложениями это еще можно объяснить, но почему к этому оказывается неготова сама винда - вот это открытие.
В том коде что я приводил >>875622 в случае наличия свопа торможение винды начинается при заполнении массива, а не при выделении. При отключенном свопе падение происходит при выделении массива, с исключением.
В реальном приложении заполнение памяти происходит в несколько потоков. При отключенном свопе во всех потоках сразу происходит исключение OutOfMemoryException при попытке выделения памяти для массива как правило. Код потока взят в try-catch, и этот catch ловит OutOfMemoryException, при этом делая успешную запись в лог этого факта. После чего управление чаще всего не достигает точки в которой происходит ожидание окончания выполнения потоков: на первом пикрилейтеде управление не достигает строки "Log.Trace("Threads finished.");" поскольку в логе эта строка так и не появляется.
Поведение при исчерпании памяти бывает разное:
- Иногда управление очевидно таки передается в точку ожидания завершения потоков, но это бывает редко. Вычислено по паре случаев нормальной обработке всех исключений программой.
- Был случай исключения null reference exception.
- Иногда приложение исчезает.
- Иногда приложение падает с крэшем.
- Был случай "неизвестного исключения".
- В одном из случаев с винды слетела тема Aero, перед этим приложение исчезло.
- Был случай гашения экрана и исчезновения Студии (упоминался выше).
- Постоянно падает дебагер Студии.
- Невозможность запустить диспетчер задач.
- Был случай когда выпал BSOD (пикрилейтед).
На данный момент теория следующая: При исчерпании памяти когда происходит попытка выделить массив происходит исключение - такое какое и должно быть. После чего остальной код начинает работать с ошибками, т.к. память по-прежнему вся занята и он уже сам начинает получать исключения в непредсказуемых местах с непредсказуемыми последствиями, каждый раз давая разную картину багов. То что код приложения не выдерживает таких издевательств и то что аналогичное происходит с другими приложениями это еще можно объяснить, но почему к этому оказывается неготова сама винда - вот это открытие.
> После чего остальной код начинает работать с ошибками, т.к. память по-прежнему вся занята и он уже сам начинает получать исключения в непредсказуемых местах с непредсказуемыми последствиями, каждый раз давая разную картину багов
что ща хуйню я читаю? OOMException выпадает же до того момента, как куча начинает выделять память под новые объекты
пики не смотрел ибо мобильный клиент их не подгрузил пидар
ОК, найди другое объяснение почему начинает глючить другой код, в том числе из других приложений и из самой винды. По-моему это от того что он не может обрабатывать исключения связанные с нехваткой памяти.
>>875983
>пики не смотрел ибо мобильный клиент их не подгрузил пидар
Там всё-равно ничего интересного.
>ОК, найди другое объяснение почему начинает глючить другой код, в том числе из других приложений и из самой винды.
Очевидно, что в других приложениях возникает необработанная ошибка выделения памяти. Возникает в рэндомном месте и в рэндомный момент времени. Поэтому разнообразные глюки вываливаются.
Может у тебя и вправду винда кривая. Можешь попробовать создавать MFP не в потоках, а до их создания, еще в синхронном коде. Ты бы виртуалку себе сделал с нормальной msdn виндой, и там бы веселился в controlled то environment.
Он отработал и выдал исключение. Приложение осталось, память вся выжрана.
Беру Студию (была открыта). И смотрю как она сможет работать. Начинаю просто ходить по главному меню даже не кликая по его пунктам, и тут хуяк - Студия падает нахуй с крешем. Если бы я закрыл своё выжравшее память приложение, то всё работало бы нормально. Вывод: Студия не обрабатывает OutOfMemoryException.
Отсюда еще один вывод: обрабатывать OutOfMemoryException не нужно, потому что код винды и других приложений, в том числе приаттаченные DLL и судя по всему даже код самой CLR, не обрабатывают это исключение и падают. Какой бы идеальный код с этой точки зрения вы не писали, он всё равно завалится, либо от того что упадет используемая чужая Dll, либо от крэша стороннего приложения, либо от крэша винды.
Это не совсем то что нужно Я собираюсь использовать типы значений вроде Nullable<Int32>
ну можно сделать MethodName<TContainer, TValue>(...) where TContainer : Nullable<TValue> where TValue : struct, но это будет дичь дикая не уверен, скомпилится ли вообще. как вариант ограничиться только констраинтом, что Т - это структура и пытаться выдоить из нее нужный тебе нуллабл
Поля Value типа T Тобиш == приводит к вызову этой же перегрузки на == И из-за этого я и не могу сравнить ее с null
Не канает :(
>Хочу чтобы метод возвращал true если принимает две null ссылки
if (op1 == null && op2 == null) return true; - не работает что ли?
Connect 2016
https://events.techdays.ru/Connect/2016-11/?wt.mc_id=AID522253_EML_4670175
работа с кором прямо с гейоси (на пике через хром)
Ява встала скален и пошла сразу НАХУЙ
и это только один, а их дохуя
А какая последняя сейчас? У меня 2015 Enterprise.
SQL 2016 (Самая защищенная, самая сладкая)
Как раньше было хуево с кучей версий и ограничей и как стало
Кластеризация таблиц в новой SQL. Это помимо остальных клёвых новых ништяков алгоритмов компресия\сжания и прочие
>Ну прям, конфу смотришь? Твой манямир еще не ахуел?
Включил минут 10 назад и все пропустил. Сейчас качаю VS for Mac.
В чем суть, можешь вкратце пояснить?
Блин качает по 100kb/sec - видимо все ринулись качать новую студия и положили их azure.
Это просто ребрендинг ксамарина, расслабься.
Анонсировали ещё пару дней назад — сайт вообще лежал.
Тестовая работа киоска без всяких ID карточек кодов и прочего
Это так мило, скоро омежки будут с киосками дружить <3
Запилить подобную няшность можно в Azure bot service. Там же гайды, шаблоны, тесты и всё остальное
Это же та самая шутка про волшебные говорящие зepкала: есть те, что очень льстят, а есть разбитые.
И именно он будет решать ваши проблемы взаимодействуя с другими апи
Мне (как Xamarin разработчику) в главное что он теперь официально "VS" те:
- их будут обновлять параллельно
- начнут шарить код
- в каком-то виде там увеличится команда разработчиков
В итоге он будет развиваться быстрее и там будет больше фич.
P.S. Вот бы еще выкинули нахрен mono и заменили все на core clr.
Работой по мультплаформированию продуктов VS занимается 19к(!) разработчиков
Указание меток прохождения тестов, новые подсказки, реал тайм проверки прохождения тестов. Сладка.
подсказки по рефакторингу по лучшим заветам предков для соблюдения чистоты командного кода
Новые ИКОНКИ, группировка данных для интелсенса для работы со сложными апи
сокращения из коробки
Шо там по C# 7.0 (primary constructor завезли)?
Просто расскажи что тебе нужно и тебе посыплют всё сахаром
Альбахари
А вот мне как маководу главное чтобы они наконец перестали лезть в залупу, запилили addinmaker который сломали вместе со всеми плагинами в 6 версиии — иначе единственная нормальная IDE на OS X просто сокращается до шарпа.
Я скоро спать пойду, я тут конечно выдержек по постил на первые 2 с половой часа но блядь там уже 7 час идет а у меня ночь на дворе
Сейчас, обновлю обычную Xamarin и сравню (может туда тоже завезли что в VS)
Интересный факт:
Версия у Visual Studio for Mac = 7.0, а у последней стабильной Xamrin = 6.x.
Появился непонятный шаблон проекта состоящий из:
1) AspNet Core WebApi сайт
2) Shared Project с MVVM частью мобильного приложения
3) Xamarin/Android - версии приложения
Из интересного: в комлекте с (2) идут сорцы реализации:
ServiceLocator - который сейчас считается антипаттерном и
MessagingCenter - синглтон для обмена сообщения между разными частями кода
IMessageDialog - интерфес с методами showMessage/Toast/Confirmation (тоже всегда его сам реализовывал)
В каком-нибудь Kotlin это можно вынести в библиотеку и мутить "observable property" одно строкой.
В каждом гребанном классе есть как минимум одна зависимость, которую надо сохранить в поле.
Пропозал на "Primary Contructor" https://github.com/dotnet/roslyn/issues/9517 зарубили сначало для в C# 6.0, теперь и в 7.0
Говорят "может кода нибудь будем, пока непонятен синтаксис", ну какого хера...
Сделай их публичными свойствами и инициализируй как обычные поля в конструкторе:
new MySevice { Dependency1 = dependency1, Dependency2 = dependency2 }.
Но это будет опционально. А вообще я не вижу тут серьезных проблем. Жалко один раз конструктор написать что ли?
>Ананасы, как вы справляетесь с такой фигней?
Копипастой и column edit-ом.
>ну какого хера
Ну это не скала и не котлин, тут думают о нововкатывающихся челиках.
>Сделай их публичными свойствам
Какие еще проперти, это тебе нет Point { X = 1, Y = 2 }
Это сервис с бизнес логикой и зависимостями на другие сервисы.
В теории они должны проставляться через DI и по канону должны быть иммутабельны.
>>877525 >>877527
>Жалко один раз конструктор написать что ли?
>Ну это не скала и не котлин
Вот именно, когда половину времени пишешь на Kotlin (где это есть) - начинает не хило бомбить
что они вот уже два релиза языка копротивляютися, но при это везде орут про эти ненужные тюплы.
1) Существует ли в .NET класс/метод/функция, которые могут провести валидацию URL: определить соответствует ли заданная строка стандарту URL. Также было бы неплохо, если бы существовал какой-нибудь инструмент, который приводил две одинаковые ссылки к одному стандартному URL(например https://vk.com и vk.com должны быть приведены к vk.com). В первую очередь меня интересуют решения через SQL, далее через managed code с использованием .NET only и C#. Другие варианты, типа этого https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb773724(v=vs.85).aspx не желательны, ибо C++ и вообще устарело. Также не желательны решения через самописные регулярки, ибо большая часть таки не удовлетворяют стандарту.
2) Существуют ли какие-нибудь стандартные биективные функции-архиваторы/хеш-функции для получения сокращённой строки из длинной. Опять же приоритетнее это сделать средствами TSQL, потом уже всякими стандартными средвствами, но код должен быть управляемым.
PS. Сегодня в течение дня искал эту фигню и не нашёл ничего особо годно, поэтому буду весьма благодарен, если кто скажет, что здесь лучше использовать.
>Что-то не могу в нугете его найти.
А ты хоть искать старался? Ну~, с Xamarin он был совместим еще год назад http://arteksoftware.com/fody-propertychanged-xamarin-studio/
>Он совместим с PCL Xamarin или netstandard 1.5 ?
>Supports .net 3.5, .net 4, .net 4.5, .net 4.6, Silverlight 4, Silverlight 5, Windows Phone 7, Windows Phone 8, Metro on Windows 8, Mono, MonoTouch, MonoDroid and PCL
По чем мне знать? Проверь и если не работает, создай issue https://github.com/Fody/Fody
http://pastebin.com/ffp1wvfg
if if if if while if if using if if
попробуй сначала инвертировать условия, дабы добиться намного меньшего уровня вложений. ну а после хотя бы попытаться разделить функционал по методам
я думал, это и есть самое страшное, но тут оказался Invoke и Thread. хуй знает, что тобой двигало, когда ты писал это вот, но я бы советовал никогда от слова по возможности не прибегать к этому вот
Бамп.
Как я понял, маппинг не работает без DataSet.
Что делать с датой формата mm/d/yyyy hh:mm:ss AM? Как мне убрать время?
>>876558
Пытался, но увы
Ну давай разберём по частям тобою написанное ))
1: private void SqlSelect(object sqlcommand)
Функция с именем SqlSelect. Судя по имени, она должна возвращать какую-то хуйню, связанную с SQL, но она ничего не возвращает. Придумай нормальное название. На вход эта функция принимает переменную sqlcommand типа object... Серьёзно? Ты используешь эту sqlcommand как строку, так и передавай её сразу как строку.
3: int i = 0;
Эта переменная используется на двадцать строк ниже и её имя не несёт никакой смысловой нагрузки. Кроме того, ты используешь её для прохода по двум различным коллекциям. Ты сэкономил несколько байт памяти, но читаемость из-за этого сильно страдает.
29: for (int count = 0; count < reader.VisibleFieldCount; count++)
Переменная с именем count используется как счётчик цикла. Ты совем мудак чтоли?
44: ++id;
Переменная id, как правило, используется в качестве идентификатора. Ты используешь её как счётчик количества ошибок. Измени её имя на что-то типа "errorCount"
45: string.Format("Ошибок: {0}", id);
Можно заменить на:
$"Ошибок: {id}"
48:
finally
{
connect.Close();
}
По идее этот блок ненужен т.к. для connect ты используешь using - он сам эту хуйню тебе должен подставить.
а что не так с вложенностью? не так уж и много ее. просто на форме имеется tabcontrol по этому используется 2 if. первый проверяет на существование вернувшегося результата с npgsql, второй проверяет на какую tabpage занести результаты.
про invoke. как переписать обращение из потока к winforms контролам? на cyberforum нашел пример if (textBox1.InvokeRequired) textBox1.Invoke(new Action<string>((s) => textBox1.Text = s), newText);
else textBox1.Text = newText;
но в нем есть небольшая загвоздка. не все контролы поддерживают invoke.
обращаться с помощью делегатов? тогда на сколько это правильно?
>Как переписать обращение из потока к winforms контролам?
Постарайся не использовать такие низкоуровневые штуки, как потоки. Для таких задач придумали async/await.
- SqlSelect метод void, т.е. он не возвращает ничего. назвал его потому, как в него попадают select команды
- sqlcommand является object т.к. этот метод вызывается из потока
- с названиями переменных понял, ок. спасибо
- string.format заменю. спасибо
- на сколько знаю, using вызывает метод dispose
а смысл от этого async/await? все равно создается отдельный поток, который самостоятельно вызывает invoke для контролов или я нубло ебаное которое не может в dev?
>на сколько знаю, using вызывает метод dispose
В свою очередь, объект, реализующий интерфейс IDisposable, должен освобождать все неуправляемые объекты в методе Dispose. В данном случае, метод Dispose для NpgsqlConnection должен выглядеть примерно так:
public void Dispose()
{
this.Close();
}
ок. спасибо!
>должен освобождать все неуправляемые объекты
самофикс: все неуправляемые ресурсы, конечно же
async/await позволяет тебе перестать пидарасить потоки, пытаясь жонглировать данными между ними.
// Синхронная версия
// В этом случае UI будет висеть, пока ты не получишь ответ
private void OnButtonClick()
{
TextBox.Text = new WebClient().DownloadString("https://google.com/");
}
// Асинхронная версия
// В этом случае UI будет продолжать работать, а задача будет выполняться в другом потоке.
// Обрати внимание, что хотя задача выполняется в другом потоке, нет никакой ебли с передачей данных в UI-поток.
private async void OnButtonClick()
{
TextBox.Text = await new WebClient().DownloadStringTaskAsync("https://google.com/");
}
хорошо, убедил.
данная конструкцию будет работать со всеми контролами? или с некоторыми надо танец с бубном подключать?
Данная конструкция не имеет вообще никакого отношения к контролам. Ты точно так, же можешь возвращать результат в какую-то переменную.
Так что:
>данная конструкция будет работать со всеми контролами
this
С# Ставил целью изучить, для своего хобби. Делаю модификацию для dota 2 с использованием инструмента https://github.com/SteamDatabase/ValveResourceFormat.
Проблема в том что в книге были небольшие задачи и примеры по изучаемым темам, но там не было нихера самого главного - как написать программу. Вот есть у меня задача - создать инструмент с помощью которого я смогу делать множество операций, которые я ранее делал ручками, изменения в клиенте игры касаемо музыки и звуков. А с чего начать, как это все писать - в душе не ебу. Может есть какая то литература, которая сосредоточена не на объяснении основ языка как в случае с книгой вайтекера, а литература которая демонстрирует и учит написанию практических программ?
http://www.fssnip.net/8P
А теперь объясните те, кто шарит - каждый рекурсивный вызов новой мемоизированной функции (fibs) ведь должен создаваться новый, внутренний словарь, так какого хуя все функции вроде как работают с одним и тем же словарем и все в конце работает?!
Нихрена не понимаю.
Спасибо няша.
>Ну тащемта в этом и смысл. Ты такой сидишь и думаешь как это реализовать получая за это бабло.
>в книге были небольшие задачи и примеры по изучаемым темам
Ты, блядь, язык изучаешь или как программы писать? Определись уже.
>А с чего начать, как это все писать - в душе не ебу.
Начать писать код, а не ебать другим мозги
>>878013
Ясен хуй я не учил язык ради изучения языка. Просто вот прочел я про кучу всякой поебени, структуры, классы, гетеры, сетеры, полиформизмы и кучу прочей еботни, которую понял, но никогда не использовал. В итоге просто не понимаешь как огромное количество всех этих вещей объеденить в то что будет программой. Хер знает с какого конца схватится.
Подкиньте может исходников какой грамотно оформленной, но не слишком замороченой программы. Почитать, посмотреть, разобраться как вообще это делают.
В моем случаем мне вообще надо будет работать с файломи. Парсингом. Конвертированием. Желательно исходников софта на эту тему. Хотя выебываться особо не буду, любый интересны, что помогут немного разобраться.
Потому что memoize возвращает функцию, а не значение. Это сочетание замыкания и ленивого вычисления.
Мне кажется ты какой-то умственно отсталый или гуманитарий, что, в принципе, одно и тоже. У тебя в голове бардак.
Чтобы что-то научиться делать, надо взять и начать вот это что-то делать.
>В итоге просто не понимаешь как огромное количество всех этих вещей объеденить
Да ладно? Если взять нехуя раз нехуя и объединить, то получится нехуя.
Хотел было возразить, и выебнуться тем в чем я спец, но потом подумал - чего спорить с чсв уебаном.
Я по человечески попросил - мне что бы понять это ваше ооп, какие нибудь исходники не сильно сложной программы, но написанной грамотно и по науке. Что бы посмотреть как вообще все это организовано, структурировано и т.д. Я могу прямо сейчас сесть и начать писать, но это будет лютейший говнокод и ужас. Возможно и к такому варианту прибегну, надо же с чего то начинать. Но пока подумалось, что может кто из опытных, подкинет образец и пример.
Ну есть пердолики, которые пердолятся ради пердолинга(нормальные же люди пердолятся ради решения проблем и достижения целей). Не слышал о таких?
Чувак, реально. Бери и делай. Это этап, который не миновать. Ты в любом случае начнешь делать говно, сколько бы ты книг не прочитал. Чем раньше начнешь делать говно, тем раньше поймешь как его не делать. Попутно можешь читать Clean Code. Но только попутно, загодя смысла нет, это просто потерянное время.
Я думаю если человеку хочется попердолить веб-сайт, то ему стоит пройти в РНР тред и не тревожить дотнет-господ.
Спасибо за дельный совет.
Возьми исходники какой-нибудь библиотеки. Но я не думаю что будет легко понять ООП по ней.
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
Вот только http://tinyurl.com/gu7tlyj
Азаазаза, тот, кого нельзя называть
Ну вот, а я хотел почитать...
Имеется главная форма с листвью, к который биндится коллекция. Поля "Имя" можно менять через комбобокс дочерней формы.
На дочернюю форму передаю саму коллекцию (для биндинга) и значение выделенного элемента поля "Имя". Но значение свойства SelectedIndex комбобокса равно -1. IsEditable комбобокса установлен в True.
Что-то делаю не так? Подскажите как решить проблему (получить правильный индекс).
http://pastebin.com/ZeDqUNiF
Да, дошло, что лямбду возвращаем. Спасибо.
Это норма?
что тебе мешает учить 5, изредка поглядывая на core?
asp.net - на 99% это ебанное ЛЕГАСИ
если хочешь вкатиться на галеры чтобы на дошик хватало, то конечно 5
>asp.net - на 99% это ебанное ЛЕГАСИ
Мало того, что не по теме вопроса анона, так еще что другое ты можешь предложить?
Я так понял, он хотел посоветовать учить Core.
я пробую, брат жив
приглашали на собес в фирму, которая уже стартует коммерческий проект на Core
>Вот только http://tinyurl.com/gu7tlyj
Это критика книги Clean Coder, а не Clean Code, дурында.
В гугле нашел SendKeys, но он какой-то хуевый и вроде не работает на системах с UAC.
Ссылка на клин код тоже была, потерлась из-за спам-фильтра.
Потому что это новая для шарпа, так ей полтора десятка лет фича — кортеж называется. Первый раз видишь потому что языков знаешь с гулькин хуй, очевидно.
Собственно, там нечего моарить:
(int, int, string) getTuple(){ return (1, 2, "hui"); }
var (_, _, hyu) = getTuple()
WriteLine(hyu) // ""hui"
С какой версией сисярпа идет?
Внутрях это как работает? Как анонимный тип или неявно приводится к Tuple <>?
>С какой версией сисярпа идет?
А какую представляли на конфе, вась? С семёркой, и пока что не идёт (точнее идёт только в первью версиях студии)
>Внутрях это как работает? Как анонимный тип или неявно приводится к Tuple <?
Когда выйдет — узнаешь. Судя по показанному синтаксису — как анонимный тип.
> Удобнее обычного asp.net или одна хуйня?
Ебать, его теперь под линапсем можно запускать, лично меня, на данный момент, удобство волнует мало.
мимодругой
<sys:String x:Key="TestString">Некоторая срань</sys:String>
Как его с типом стринг забиндить на свойство во вьюмодели?
Вечер в хату. Подскажите как делается динамическая замена плюсовых dll во время выполнения .Net программы. Надо при выполнении какого-то условия подгрузить С++ либу A.dll из папки 1, а при не выполнении С++ либу A.dll из папки 2.
VS2015, Windows 10
Вроде как новый тип ValueTuple
Я пробую, по ощущениям - почти прорыв: что-то допилили до конца (асинхронные партиалы, теперь называются компоненты), что-то объединили (web api and mvc теперь от одного класса наследуется), а эти сладкие nuget пакеты... очень продуманно с модульностью, такое чувство, что еще чуть и можно будет собирать приложение как конструктор
конфигурация самого приложения мне напоминает старый добрый owin (это плюс)
объединение webapi и mvc мне казалась гениальной идеей до того момента, как я не стал строить адекватное rest-вебапп. вот тут я сразу не понял сути пространства имен Microsoft.aspnetcore.webapi. то, что оно делает, не стакается с ~.mvc и в рантайме получается какой-то трешак (некоторые полезные в обеих случаях штуки, к примеру, роут атрибуты, присутствуют только в мвс). для поддержки перекатывания был выпущен webapicompatshim, но получается, что в одной части ты работаешь с httprequestmessage, в другой с httpcontext и это мне показалось странным
еще у меня есть претензии к нативному dependency inhection фреймворку, но есть вариант, что это говно просто вот так работает и я чего-то не знаю
в целом я особо не жалуюсь. как тут один товарищ упомянул модульность - она прям самое то, что надо
если кито знает, есть ли серьезная просадка в перфомансе при использовании .netfx библиотеков в .netcore приложении?
>мне казалась гениальной идеей до того момента, как я не стал строить адекватное rest-вебапп
Ну а вывод тут один: надо делать SPA на typescript + WebAPI, остальные подходы устарели.
linux сервера без костылей mono + перформанс + docker + можно разрабатывать на маке в VSC попивая смузи
> Для таких задач придумали async/await.
Кое-где до сих пор под второй .net пограмируют легаси говно, а ты про 4.5 фреймворк говоришь.
По-моему с таких проектов валить нужно (может даже из компании), если на таком старом говне пишешь. Сам сейчас на 4.0 пишу, а то и ниже лол, а до этого на 4.6 сидел. Не хватает конечно async / await, да и сахара из 4.6. Теперь страдаю от этого говна и собираюсь перекатываться в другое место.
Пилил недавнополгода назад сдк к одному WEB API на TypeScript + Angular + Karma + Jasmine. Скажем так, прикольно, но не удобно:
- Некоторые вещи приходится реализовывать хаками, так как TypeScript видите ли такую запись не поддерживает (promises, d.ts файлы - вот это все из этой оперы).
- Некоторые вещи не покрываются тестами вообще не в какую.
- Часто приходилось отходить от строгой типизации. Меня часто просто вынуждал язык использовать any. Хотя, казалось бы, писал довольно тривиальные вещи. Возможно язык станет лучше, если запретить это слово к применению, но нет нормальных замен.
Возможно я чего-то не понимаю, в целом TypeScript не понравился.
>>879801
>Кое-где до сих пор под второй .net пограмируют легаси говно
Что мешает перейти на 4.6.х? Обычно эти вопросы решаемы при должном обосновании. Мне часто приходится решать задачи на экспериментальных фреймворках/утилитах, так как почти всегда не достаточно просто написать код, чтобы он работал. Код должен быть эффективным и простым среди аналогов.
>валить нужно (может даже из компании),
А если даже на собеседование никуда не приглашают, потому что опыта 0 в резюме
Я же не синьор у которого 20 вакансий на выбор. Меня пригласили на целых 3 собеса за 3 месяца.
Зависит от руководства на самом деле. Я например сейчас на корейцев работаю и у них свое мышление от которого можно охуеть порой. т.е. если ты захочешь перевести проект на новый фреймворк это нужно обоснавать в письменном виде какие это плюшки принесет, почему, нахуя и т п. И да - у них своё понимание плюшек.
>>879835
Набирайся опыта, учи попутно core / mvc 5 тогда, хули. А на сколько вакансий ты примерно откликнулся?
>целых 3 собеса за 3 месяца
Что ты такое в резюме написал, что все так плохо?
>опыта 0 в резюме
Так не бывает. Обязательно найдется пара проектов для себя/знакомых, которые сойдут за опыт.
>Что ты такое в резюме написал, что все так плохо?
То что знаю, то и написал + образование.
> Так не бывает. Обязательно найдется пара проектов для себя/знакомых, которые сойдут за опыт.
Я писал проекты, они конечно не йоба, а чтобы продемонcтрировать что я не хуй с горы.
Это наверное рандом
Знакомого на галеру взяли: он показал пару лаб, спросили английский и попросили сделать реверс строки. Второй попал на галерные курсы и после них взяли веслать.
Уже все подзабыл, что связанное с вебом, потому что все технологии, которые используются на проекте, 2005 года.
Вот так:
private static extern IntPtr LoadLibrary(string name);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
Использование:
IntPtr dllHandle = LoadLibrary(dllname);
if (dllHandle == IntPtr.Zero) throw new Exception("Не удалось загрузить dll: " + dllname);
try
{
IntPtr addr = GetProcAddress(dllHandle, "здесь_имя функции_из_dll");
if (addr == IntPtr.Zero) throw new Exception("Функция здесь_имя функции_из_dll не найдена в dll: " + dllname);
FunctionBlaBla = (делегат_с_сигнатурой_функции)Marshal.GetDelegateForFunctionPointer(addr, typeof(делегат_с_сигнатурой_функции));
}
catch
{
FreeLibrary(dllHandle);
dllHandle = IntPtr.Zero;
throw;
}
FunctionBlaBla - переменная типа "делегат_с_сигнатурой_функции"
А, и еще:
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern IntPtr GetProcAddress(IntPtr hModule, string name);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool FreeLibrary(IntPtr hModule);
Сука, не так. Вот так:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibrary(string name);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern IntPtr GetProcAddress(IntPtr hModule, string name);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool FreeLibrary(IntPtr hModule);
Только напоминает? Он построен на Owin
Что-то не понял где объдинение mvc и webapi дало сбой? Подробнее плз
DI все мои потребности покрывает, мне нравится, чем тебя не угодил?) Кстати, можешь любой другой поставить
>не менее 5 лет
>в коммерческие проекты
>хачкель
Это такой тралленг? Сразу бы программиста на Rust с 5+ годами искали, чего уж.
> Только напоминает? Он построен на Owin
я, может, невнимательно читал, но сей детали не увидел. а даже если и увидел, то что это меняет в моем сообщении?
> Что-то не понял где объдинение mvc и webapi дало сбой? Подробнее плз
http://stackoverflow.com/questions/40464546/asp-core-nullreferenceexception-in-apicontroller-executeasync
вот мой квесщн собственно. там почитать будет интересней, чем я тут буду объяснять
> DI все мои потребности покрывает, мне нравится, чем тебя не угодил?)
я пытался заиспользовать контекст базы данных (зарегистрированным как AddScoped<>) в одном из Middleware (причем, не как чайлд самого класса миддлеваре, а как созданный инстанс в рамках исполнения метода). так вот эта хуйня не диспоузала dbcontext при выходе из метода и фактически протаскивала этот инстанс везде, где только он дальше использовался даже в рамках другого реквеста. я, конешно, подозреваю, что мой подход был так себе, но и документация тогда получаецца врет ибо контекст жизни для Scoped-зависимостей - это Context, а не реквест
> Кстати, можешь любой другой поставить
ну зачем, собственно? тимболие што я, субъективно, вижу (пока что) в этом больше геморроя, чем толку
Из опыта только си, и то на начальном уровне.
> Надо ли уметь
ну я совершенно честно заявляю, что в клиентской разработке я еблан полный и делаю все с гуглом напару. кому-то в основном это не нравится сразу и они махают мне ручкой либо эйчарше нужно выполнить месячный план собеседований и меня тянут дальше к техспецам под предлогом "ну хули там можно выучить наверное да"
по большей части - это корректировка/расширение API и бизнес-логики приложений. если нету специально обученных DBA, то еще попросють влезть в кверяние базы данных
https://github.com/aspnet/EntityFramework
https://github.com/aspnet/Mvc
https://github.com/aspnet/KestrelHttpServer
>что показывает?
Project WebApplication1 (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: ...\WebApplication1\src\WebApplication1
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
Он и через студию, если ctrl+F5 нажать запускается. Эта ошибка будет, если просто собраться его попробовать по F5, как по идее и должно быть
Че-то я не понял какой apicontroller в core? Тем более system.web? Щито ты творишь?
Не знаю как она диспозила, но я сам лично видел в исходниках, что диспоз происходит после обработки запроса, могу найти, если хочешь
>контекст жизни для Scoped-зависимостей - это Context, а не реквест
О каком ты контексте говоришь?
> какой apicontroller в core?
Microsoft.aspnetcore.webapi.controllers.apicontroller
но я могу ошибаться с пространством имен ибо с телефона
> Тем более system.web?
где там сустем.веб? щито ьы городишь?
> могу найти, если хочешь
даже если ты что-то мне найдешь, это отменит тот факт, что дбконтекст не убивался после выполнения запроса?
>О каком ты контексте говоришь?
system.runtime.remoting.context
>где там сустем.веб? щито ьы городишь?
У тебя в вопросе на стэке "inherited from System.Web.Http.ApiController"
>тот факт, что дбконтекст не убивался
Значит ты что-то делаешь не так
Что это за контекст?
Кстати, где документацию читаешь?
> inherited from System.Web.Http.ApiController
воу, я уж чета не смотрел, что писал. ну, в общем, это все мне стало доступно после того, как я подключил Microsoft.AspNet.WebApi.Owin. вангую, что это для ASP 5 и все такое, но это мине студия подсказала, это ния
> Значит ты что-то делаешь не так
ну тут как сказать. я использовал замыкание на IServicesCollection и юзал его как Service Locator (знаю, что это анти-паттерн, но не суть). в статическом методе одного из Middleware брал реализацию нужного мне всего (в т.ч. зависимости уходили вниз до DbContext), делал дела, метод завершался (тут я даже обнулял ссылки на сервисы дабы ускорить умирание некоторых из инстансов) и все были счастливы, кроме меня. вот тут-то я и подумал, что AddScope<> привязывает объекты к контексту, а не реквесту, как сказано
> Что это за контекст?
если в двух словах, как я это понимаю, то это область привязки и видимости объектов
вообще, нормального описания данной проблемы в околоmsdn-ской среде я слабо нашел, в основном бложики, и те, по большей части, опираются больше на ObjectContext (зачем-то) и производные. я черпал свои говнопознания что-то вроде бы отсюда
http://daxgrom.com.ua/info/platforma-net-programmirovanie-i-bezopasnost/obekty-i-kontekst
и уверен, что не разобрался до конца во всем происходящем
> Кстати, где документацию читаешь?
пробовал тут https://docs.microsoft.com/ru-ru/aspnet/core/getting-started но майкрософт любит давать примеры в стиле "для даунов", посему я перешел просто в гугл по вопросам, что нужно решить. также решил на метаните почитать, но там сплошной перевод вышеуказанного сайта + адаптация своих ранешних написалок по asp.net, потому стало тоже неинтересно
Можешь кинуть код, где ты в конифигурации прописываешь зависимсть для класса, который не диспозится? Когда-то у самого были проблемы с незакрывающими соединениями из за DI и на БД весели тысячи соединений, хотя я конечно использовать сторонний DI фреймворк. Так что интересно было бы посмотреть, что у тебя не так там.
Мимодругой-анон
https://gist.github.com/anonymous/fc97f14fc6a1476d0d61e0b3754b1ce4?ts=4
Нужно по SignalR уведомлять клиентов об изменениях в репозитории, для этого мне нужен репозиторий, который будет кидать события.
Мой коллега говорит, что я еблан, и сервис не должен реализовывать интерфейс репозитория. Но я в душе не ебу, как это можно сделать по другому.
С каким же быдлом я здесь сижу
Бамп вопроса.
у меня не создавалось много контекстов, у меня все проходило через один, соединение с которым было открыто практически с самого начала работы приложения
код - это будет громоздко и неинформативно, тимболия я его снес
суть в том, что в одном из Middleware (об котором ни одна хуйня в интернетах не обмолвилась, что инстанс создается при старте и является статическим для всех реквестов), вызывалась такая штука
var service = (IServiceCollection).Resolve<MyGovnoService>(), одной из дочерних зависимостей которого был контекст. регистрация зависимости DbContext происходила буквально таким образом: services.AddScoped(typeof(DbContext), typeof(MyContext))
Хм, по-идее все ок должно быть, но с этим встроенными DI фреймворком хуй знает как все работает. Я бы еще попробовал бы регистрацию через services.AddScoped<type, type>(); или
services.AddSingleton<type, type>();
<T1, T2> не получалось т.к. дбконтекст находится на один уровень ниже в архитектуре WebApp-Bll-DAL и недоступен для веб-приложения. посему мне приходилось с помощью MEF коллектить зависимости в виде {SourceType, DestinationType, Scope} и уже вот таким говном их регистрировать
ну DbContext как Singleton у меня не возникло мысли регистрировать
clr via c# Рихтера, а затем можно курить доки по asp.net на офф. сайте. Либо сразу начинай читать доки по asp.net. Ну это в случае веба естественно.
Про EF можно и в доках asp.net читать - благо там много знать не нужно. Да и на EF весь свет клином не сошелся. Можно выбрать какую-нибудь мини-orm типа дапера или linq2db, хотя с EF в любом случае придется работать, да.
Слабоват пока в английском, посоветовали одновременно читать его на русском и английском, нашёл только 5.0.
Нихуя. Дергать резолвы ручками можно только при конфигурации контейнера.
Иначе вся суть контейнеров пропадает. В бизнес-логику лезет какой-то блядский код контейнера, если решим спрыгнуть с контейнера или перелезть на другой придётся вычищать кучу этой хери.
Так что не надо дергать ресолв там где не надо.
public string Name
{
get { return name; }
set { name = value; }
}
Что делает set? Что за виртуальная переменная value, которую не нужно объявлять? Как set участвует в вызове этого самого свойства?
Ой пиздец. Set устанавливает свойство. value это значение которое передается в set которое требуется установить.
ClassName fuck = new ClassName();
fuck.Name = "fuck"; // - вызовется метод set, в качестве value будет строка "fuck".
есть более простой вариант
>string Name { get; set; }
если хочешь начальное значение задать, то просто добавляешь в конец >= "имя"
А зачем такой дикий геморой с установкой значений полей? Для того, чтобы закладывать логику обработки от исключений или что?
когда тебе функционала полей недостаточно, а поступать как в жабе getField() setField() не комильфо но сиравно компилятор сгенерит методы
ну и всякая такая вещь как инкапсуляция
у тебя есть класс с публичным полем Name
работа инстансов этого класса в дальнейшем по приложению сопряжена с тем, что Name не должен быть null/empty/whitespace, если длина не более 16см, а начинаться с заглавной буквы - это вообще пиздец как недопустимо
у тебя есть два пути: создать метод SetName(string name) или проводить проверку перед каждым вызовом obj.Name = {value}. фактически - первое реализовано как свойства в .NET. get {} это == GetName() {return name;}. set{} это == SetName(string name) { CheckName(); name = {value}; }
Запили абстракцию над контейнером. И если ты внезапно решишь пойти на другой - просто поменяешь в одном месте.
возможны мы вообще об одном и том же говорим но по-разному?
Контейнер конфигурируется и присутствует только в проекте исполнения. Никаких резолвов не надо дергать. Все инжектится через конструкторы, если требуютя разные реализации, то применяется регистрация по условию. Все уважаемые DI фреймворки это умеют.
ну да, пока всё совпадает. инжекция в конструкцию - или какой-то абстрактный резолв - это уже детали, бро.
а что бы ты хотел увидеть?
Вот например проекты серьёзные
https://github.com/search?o=desc&q=language:C#&ref=advsearch&s=stars&type=Repositories&utf8=✓
Ну коллега прав.
По факту у тебя тырфейс IHuyService должен содержать тоже методы Get, Delete, Modify, Add.
Сначала покажется что дублирование кода. но на самом деле у тебя в интерфейсе сервиса может быть например 3 метода Get, Save, Delete. А Save уже по своей логике будет вызывать Add или Modify.
Потому для сервисов и репозитроиев отдельные интерфейсы
Вот тебе пример:
>>879860
>>879863
>>879865
Ссылка например https://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx
Статьи в интернетике обычно не существуют.
Гуглится всё следущим образом.
Сначала тебе нужна какая-нибудь функция, как правило она на C++ и как правило вызывает виндовую dll. Иногда может быть другая dll.
В случае если функция виндовая, но гуглится на msdn. Например недавно я гуглил функцию GlobalMemoryStatusEx, которой нет в C#. Нашел. Дальше в гугле вбиваю "GlobalMemoryStatusEx Pinvoke", после чего гугол находит мне объявление этой функции вместе со структурой которая там используется:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class MEMORYSTATUSEX
{
public uint dwLength;
public uint dwMemoryLoad;
public ulong ullTotalPhys;
public ulong ullAvailPhys;
public ulong ullTotalPageFile;
public ulong ullAvailPageFile;
public ulong ullTotalVirtual;
public ulong ullAvailVirtual;
public ulong ullAvailExtendedVirtual;
public MEMORYSTATUSEX()
{
this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
}
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
А дальше я просто вызываю эту функцию таким образом:
public static ulong GetFreeMemoryMb()
{
WinApi.MEMORYSTATUSEX memoryStatus = new WinApi.MEMORYSTATUSEX();
WinApi.GlobalMemoryStatusEx(memoryStatus);
return memoryStatus.ullAvailPhys / 1024 / 1024;
}
И всё.
Случаев чтобы какая-либо виндовая функция не гуглилась и не находилась её декларация у меня еще не было, поэтому самостоятельно даже не приходится всё это писать, достаточно нагуглить и скопипастить. Иногда бывают не самые оптимальные объявления, но как правило они оптимальные. В крайнем случае можно изучить как это всё маршалится и заебенить всё самому, но в результате будет всё по сути то же самое.
Вот тебе пример:
>>879860
>>879863
>>879865
Ссылка например https://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx
Статьи в интернетике обычно не существуют.
Гуглится всё следущим образом.
Сначала тебе нужна какая-нибудь функция, как правило она на C++ и как правило вызывает виндовую dll. Иногда может быть другая dll.
В случае если функция виндовая, но гуглится на msdn. Например недавно я гуглил функцию GlobalMemoryStatusEx, которой нет в C#. Нашел. Дальше в гугле вбиваю "GlobalMemoryStatusEx Pinvoke", после чего гугол находит мне объявление этой функции вместе со структурой которая там используется:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class MEMORYSTATUSEX
{
public uint dwLength;
public uint dwMemoryLoad;
public ulong ullTotalPhys;
public ulong ullAvailPhys;
public ulong ullTotalPageFile;
public ulong ullAvailPageFile;
public ulong ullTotalVirtual;
public ulong ullAvailVirtual;
public ulong ullAvailExtendedVirtual;
public MEMORYSTATUSEX()
{
this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
}
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
А дальше я просто вызываю эту функцию таким образом:
public static ulong GetFreeMemoryMb()
{
WinApi.MEMORYSTATUSEX memoryStatus = new WinApi.MEMORYSTATUSEX();
WinApi.GlobalMemoryStatusEx(memoryStatus);
return memoryStatus.ullAvailPhys / 1024 / 1024;
}
И всё.
Случаев чтобы какая-либо виндовая функция не гуглилась и не находилась её декларация у меня еще не было, поэтому самостоятельно даже не приходится всё это писать, достаточно нагуглить и скопипастить. Иногда бывают не самые оптимальные объявления, но как правило они оптимальные. В крайнем случае можно изучить как это всё маршалится и заебенить всё самому, но в результате будет всё по сути то же самое.
Спасибо, ты расшарил в паре предложений то, что не могли расшарить мне трое других людей.
А зачем вообще свойства требуются? Почему нельзя просто объявить поле public string name в другом классе и уже с ним оперировать?
А, ты уже ответил. Спасибо.
в WPF окна, не формы.
мне лень заморачиваться и вчитываться откуда и куда ты кидаешь коллекцию, но я заметил, что ты селектед индекс биндишь к свойству, но тут есть 3 проблемы
уа первых: ващпе, для биндинга принято делать класс, который в паттерне MVVM будет выполнять роль ViewModel. в конструкторе окна делаешь DataContext окна объектом этого нового класса-ViewModel. при биндинге xaml'а именно в вроде бы первом назначенном, не равном null, контейнере контрола, на котором обрабатывается текущий биндингDataContext'e ищется свойство, которое ты привязываешь
уа втарых: в классе ViewModel реализуешь интерфейс INotifyPropertyChanged, там всего 1 событие.
у третьих: свойство для биндинга придется делать не автореализуемое, а поле + свойство, + в set {} рекомендуется делать проверку, что новое значение != текущему, ну и вызываешь событие из INotifyPropertyChanged примерно таким образом:
if (PropertyChanged!=null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("propertyName"))
или, если не ебёшь говно мамонта и при этом пишешь на wpf, ну пиздец, а пишешь на C# 6.0 , то одной строкой
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedIndex)));
у пятых, по дефолту биндинг в режиме OneWay, т.е. когда ты кликнешь на другой элемент три вью, селектединдекс не изменится, чтобы он изменился, нужно уебать режим биндинга (в кзамле) OneWayToSource
студия для WPF уже достаточно давненько предлагает накатить атрибут, по-моему InvokationTargetName, который подсовывает по-умолчанию значение, аналогичное nameof(InsidePropertyName), что позволяет вызвать ивэнт как PropertyChanged.Invoke(this), что, мне кажется, достаточно крутецкой альтернативой
Вот есть
Class A
{
int YOBA;
public A (int i)
{
YOBA=i;
}
}
Class B: A
{
}
Выдает ошибку, потому что у класса А нет контсрукторов, принимающих 0 аргументов. Чому так? Как мне тогда унаследовать без стандартного конструктора?
>подключил Microsoft.AspNet.WebApi.Owin.
Зачем ты это делал? Это же одна из фич новой mvc - объединение mvc и web api (никакого дублирования кода, удобство, полная объдиненные роуты), а ты от этого собственноручно отказываешься. Тебе же на стеке ответили: наследуйся от Controllers.
Может все же стоит документацию глазами пробежать? ;)
Ссылку, ведь это же ссылочный тип
потому, что это объединение также уебищно, как и в старом mvc наличие actionresult. фактически я не могу сконструировать статически типизированное api, имея при этом возможность возвращать statuscode в случае чего стандартными средствами. приходится городить хуй знает што
Но зачем? Если все хорошо - он сам добавит 200, если плохо - ты явно вернешь это (return StatusCode(418);)
Это же тип стандарт. Да и, думаю, если задаться - можно поискать где переопределить так, чтоб не забыдлкодить, няш)
Каким способом в C# можно реализовать циклическую очередь? Может ли System.Collections.Queue решить вопрос, или проще вообще юзать указатели. Просто это как-то небезопасно
>ServiceLocator - который сейчас считается антипаттерном
По мнению одного бородатого пидора, который заебал везде пиарить свою книгу по DI. С объяснениями уровня "generic методы абсолютное зло, их бесконечное число, и вообще нарушают инкапсуляцию". Ну и полным отсутствием понимания что такое антипаттерн вообще (поди и паттерн тоже).
Я читал что там возможны проблемы с утечкой памяти, тк servicelocator это синглтон.
Лично мне не нравится что тесты усложняются.
Я не могу закинуть зависимости в конструктор, мне в каждом тесте приходится реализовывать фейковый SerLoc.
нам в универе для этого рекоммендовали делать АТД, у которого 0 и 1 элемент коллекции указывают на начало очереди и количество элементов в очереди соответственно, ну и от этого плясать. у меня вроде даже реализация осталась. если интересно - скину.
ты понимаешь всю уебищность ситуации? у меня API с возвращаемыми объектами типа IActionResult. это может быть ObjectResult(UserDto), FileStreamResult, null, еще какая-нибудь хуйня. а если результат экшена будет тот же UserDto, то я уже никаким боком не втулю StatusCodeResult. конечно, можно пойти тем путем, которым это сделано в старом WebAPI - если нада статус кодэ, бросаемся HttpResponseException(StatusCode.Kek), а фильтры сделают все остальное. и, возможно, было бы неплохо, но я на основе исключений уровня BLL формирую нужные мне статус коды и возвращаемые объекты. посему от такой хуйни как try {} catch {throw new} ушел.
вопрос в чем? когда ты вставляешь что-то куда-то, тебе нужно чекать эффекты, накладываемые вставляемым объектом и прокидывать их выше по уровню. т.е. тебе нужно построить дерево со связями от дочернего элемента к родительскому (либо двусторонний тип связи), ну и дальше все остальное
>>882362
ну тут всякое у меня бывало. от ручного копирования по rdp/ftp (и правки всех конфигурационных файлов, которых было пиздец как), до билд сервера, который менеджит все экварменты, включая продакшн и говнодев. удобнее всего, конечно, пользоваться Deploy опцией с Visual Studio, но это для серъезных проектов обычно не подходит
>вопрос в чем?
Не, брат, выше прокидывать не нужно. Поставил пилота в корпус, накинул баф на оборудование. Вопрос в том что так делать номрально? Сделать публичные методы у оборудования .AddBuff() .RemoveAllBuffs(), или может это проеб архитектуры?
Ты хотел сказать по мнению небыдлокодеров
> потом навел на подсказу реактора, а там хуй, не пишет что дает +50 реактор
а тут ты предлагаешь гадать, что и как ты делаешь и что у тебя кому не дает
> Сделать публичные методы у оборудования .AddBuff() .RemoveAllBuffs()
вещь, которая тебе в дальнейшем устроит спагетти в коде. да и вообще такие штуки опасны в публичном доступе. на уровне internal, а лучше всего private в какой-нибудь абстрактной абстракции - идеальное место для этих методов
>>881747
>>881872
INotifyPropertyChanged не помог.
Но я всё-таки понял, в чём был косяк. Нужно было привязать свойство Text комбобокса.
Почитал про INotifyPropertyChanged и появился вопрос:
pastebin.com/2ugnhW0a
Эти записи равноценны? В 1-ом варианте неявно вызывается Invoke или как? Объясните в чём разница
дыа.
Есть буквально пара строк кода. Сразу оговорюсь, что код работает. Но студии он ненравится.
var g = Graphics.FromImage("test.bmp");
g.DrawString("test", new Font("Microsoft Sans Serif", 99.9F, FontStyle.Bold, GraphicsUnit.Point), new SolidBrush(Color.White), new Rectangle(0, 100, 200, 200), stringFormat);
Куча предупреждений на эту строку.
вызовите System.IDisposable.Dispose для объекта 'new SolidBrush(Color.White)' перед тем, как все ссылки на него будут вне области видимости
И так для каждого аргумента, для SolidBrush, для Rectangle. Короче для всего что я создаю через new. Ругалось и на stringFormat, но его я создаю отдельной переменной. Добавил строкой ниже stringFormat.Dispose() и на него ругаться перестало. На остальные продолжает. Но я не могу им сделать Dispose.
Я где то хуй или это можно спокойно игнорировать?
Graphics же IDisposable по-моему?
using(var brush = new SolidBrush(Color.White))
using(var rectangle = new Rectangle(0, 100, 200, 200))
{
g.DrawString("test", new Font("Microsoft Sans Serif", 99.9F, FontStyle.Bold, GraphicsUnit.Point), brush, rectangle, stringFormat);
}
>Я где то хуй или это можно спокойно игнорировать?
По идее метод Dispose вызывается в деструкторе, так что утечки быть не должно. Но это считается плохим тоном - не освобождать неуправляемые ресурсы сразу после использования.
Короче попробовал и в визуале и хамарин студио накатить, что-то не работает нихуя.
Есть где-то нормальный гайд как начать пилить приложухи на андроид?
в деструкторе вызывается protected void Dispose(bool), если он есть
Я не знаю как создать запрос.
Вот допустим у меня есть очередь A из объектов B. Как мне выдрать объекты где B.rule = 42?
Спасибо, помог.
Вот ещё глупый вопрос, ну я только начинаю.
http://pastebin.com/0WuNjwPE
Вот класс. В нём при запуске кода происходит NullReferenceException хотя я и юзаю
SomeCycleQueue.Cenqueue(penny);
То есть я посылаю объект, он должен копироваться в newcoin. Я хотел попробовать принимать ссылку на объект, там создавать объект Coin конструктором копий по этой ссылке и его уже в enqueue. Но блин, как-то это всё запарено. Должен быть простой метод.
PS: Паста сырая и переменная size не работает как следует. Но мне бы решить проблему с передачей объекта, то фигня.
Двач, сорян за беспокойство. Я просто забыл инициализировать очередь. А ещё, спите ночью а не сычуйте. Умоляю :З
Блять, ну ты бы хоть контекст подкинул о чем речь. Как я понял разговор про тестирование - когда ты тестируешь что-то и в коде есть метод, который цепляет данные из БД, то тебе не обязательно использовать реализацию этого метода, которая работает напрямую через БД. К примеру у тебя есть интерфейс и реализация интерфейса, которая работает с базой. За место использовния этой реализации ты создаешь мок-объект, который возвращает какие-то данные а какие - ты сам можешь определить в рамках тестирвоания и дальше ими уже оперируешь. Про мок-объект я надеюсь нагуглишь.
я не про тестирование.
задание дали вот такое:
>Прочитать из базы данных массив объектов Animal
>Передать массив в виде модели в представление
>Отобразить данные, используя шаблон
>Методы работы с базой данных могут возвращать фэйковые данные, цеплять реальную бд не обязательно.
в представлении написать форму добавления новой записи, при этом сервер должен вернуть готовый для вставки html(это как блядь?)
Ты бы спросил у того кто задание тебе дал, ибо 1-ый и 4-ый пункты противоречат сами себе. По поводу готового html: тут имеется ввиду может быть partial view какой-то, либо можешь сгенерировать читый html на сервере с помощью простой строки, либо t4 шаблона и сохранить эту строку в модель, а во вьюхе вызвать это говно таким образом: @Raw(Model)
Есть сборник? Я б порешал, а то в голову не лезут задачи на ооп, а в универских методах одна математика
Я придумал такой паттерн (пикрилейтед).
Суть его в том что многие объекты (в реальном приложении - разных классов) могут одновременно использовать общие объекты, имея на них ссылки. Эти используемые объекты (на пикче класса SUBJ) довольно большие в плане занимаемой памяти, поэтому делать клоны этих объектов каждый раз нежелательно из-за того что растет потребление памяти. В то же время эти объекты (типа SUBJ) могут изменяться их владельцами. Из-за того что у них могут быть и другие владельцы, это ведет к тому что у других владельцев фактически происходит подмена данных, чего быть не должно.
Я придумал хранить количество ссылок на объект типа SUBJ при его прикреплении к родительскому (на пикче типа USER) и если объекту USER требуется поменять состояние SUBJ, то:
1. Если число ссылок равно единице, то просто меняем состояние SUBJ.
2. Если число ссылок больше единицы, то клонируем объект, число ссылок в старом уменьшаем, в новом (клоне) увеличиваем и становимся его единственным владельцем, после чего меняем его состояние не боясь затронуть остальных владельцев SUBJ.
Вопрос: как называется этот паттерн? Я помню читал книгу про паттерны, но по-моему не встречал такого. Алсо, интересно есть ли более продуманные реализации данной схемы.
Хуй знает. Я не паттерналист, но мысль вкину. Мне кажется говна тут хлебнуть можно со всем этим количеством ссылок, которые нужно диспозить еще как-то тебе. Не проще ли сделать статический класс, который бы был ответственен за выдачу этих тяжелых объектов (т.е. по-сути делал бы глубокое копирование твоего толстого объекта и возвращал копию). А GC сам бы всю работу делал по утилизации всего этого говна, когда объект user уничтожался бы. Это вообще на паттерн не очень похоже ибо в реализации и поддержке как-то уж геморно получается и слишком специфичная хуйня.
>Мне кажется говна тут хлебнуть можно со всем этим количеством ссылок, которые нужно диспозить еще как-то тебе.
При бросании объекта SUBJ счетчик ссылок у него уменьшается. Но это не обязательно и даже если счетчик ссылок будет выше реального количества ссылок это приведет только к лишнему клонированию, но не к неработоспособности программы. Вести учет ссылок действительно геморно, но в моем случае учитывать присоединение объекта (т.е. увеличение счетчика) (а это самое главное) было легко, а уменьшение счетчика трудно, но последнее не является для меня проблемой, по крайней мере пока.
> Не проще ли сделать статический класс, который бы был ответственен за выдачу этих тяжелых объектов
Это приведет к сильному расходу памяти, что неприемлемо.
А можешь пример какой-то привести, где это можно использовать в реальном приложении? Мне почему-то кажется, что есть вариант получше и ты просто не в ту сторону копаешь.
Так я уже по сути привел всё описание.
- Есть объект SUBJ.
- Его могут использовать разные классы.
- Некоторые из них могут его менять.
- Объект SUBJ очень большой, поэтому лишних клонирований в идеале быть не должно.
- Изменение каким-либо классом объекта SUBJ не должно сказываться на остальных владельцах этого SUBJ (за исключением случаев когда это делается намеренно).
Не-не, ты меня не понял. Я имел ввиду какое-то реальное приложение в котором бы это было задействовано и как бы оно использовалось. И типа что это за приложение: веб / десктоп / мобилки; откуда эти тяжелые данные бы брались и т п. Твою идею я понял, но мне интересно реальный кейс какой-то было бы почитать.
И что это поменяет? Я просто не понимаю смысл. Придумаешь как надо поменять приложение (т.е. ТЗ) чтобы его можно было выполнить проще?
Ну ок.
Приложение десктопное для анализа фин.рядов, что-то типа тестера стратегий.
Объект SUBJ содержит массив баров финансового инструмента и может использоваться для показа на экране в MDI-окне (условно объект класса USER в моих картинках выше, в реальном приложении объект называется Graph, который через цепь объектов в конечном итоге принадлежит MDI-окну) и для прогона по нему стратегии (объект класса Strategy, на картинках я его не показывал, т.к. это сути не поменяло бы) и индикатора (класс Indicator).
График можно:
- Загрузить из файла в MDI-окно.
- Скопировать из одного окна в другое.
- Изменить состояние графика в окне (изменить таймфрейм, удалить часть баров, добавить новые, слить с другим и так далее). Это не должно отразиться на других окнах куда или откуда был скопирован этот график ранее.
- Использовать в качестве входного графика для стратегии или индикатора. Последующее редактирование графика в окне не должно повлиять на график выбранный для стратегии. Для стратегии можно выбрать любой график из любого MDI-окна.
чем-то, чессгря, напоминает микс пула объектов и прототипа. причем, последний - одна из стратегий, инкапсулированная под капотом пула
выполняю простенькие задания для студентов и немного застрял в реализации (задача номер 5 http://www.itmathrepetitor.ru/prog/zadachi-na-vychisleniya)
В чем именно ошибка? Видимость переменной же должна быть в пределах цикла.
Зачем i два раза. В for() убери его
using System;
public class Program
{
public static void Main()
{
const int maxi = 4, maxj = 13;
char[,] arrayD = new char[maxi, maxj];
bool flag = true;
for (int i = 0, j = 0; j < maxj; j++)
{
arrayD[i, j] = '*';
if (flag) i++; else i--;
if (flag && i == 3) flag = false;
if (!flag && i == 0) flag = true;
}
for (int i = 0; i < maxi; i++)
{
for (int j = 0; j < maxj; j++)
{
Console.Write(arrayD[i, j]);
}
Console.Write('\n');
}
}
using System;
public class Program
{
public static void Main()
{
const int maxi = 4, maxj = 13;
char[,] arrayD = new char[maxi, maxj];
bool flag = true;
for (int i = 0, j = 0; j < maxj; j++)
{
arrayD[i, j] = '*';
if (flag) i++; else i--;
if (flag && i == 3) flag = false;
if (!flag && i == 0) flag = true;
}
for (int i = 0; i < maxi; i++)
{
for (int j = 0; j < maxj; j++)
{
Console.Write(arrayD[i, j]);
}
Console.Write('\n');
}
}
Ошибка была во "flag ? i++ : i--;" - так делать нельзя (хотя жаль что нельзя, да).
Спасибо анончик, понять не мог почему компилятор орал на все подряд, а не на эту строчку.
Кстати, есть ли вариант залить ячейки массива идентичным символом не используя проход по каждой?
>Спасибо анончик, понять не мог почему компилятор орал на все подряд, а не на эту строчку.
Я и сам удивился. Вообще в 90-х такое часто случалось с компиляторами, а сейчас это редкость.
>Кстати, есть ли вариант залить ячейки массива идентичным символом не используя проход по каждой?
По сути нет. Есть функция Array.Clear, но она заполняет нулями и является целой функцией со своим кодом.
Алсо, двухмерные массивы что ты используешь достаточно медленные в своей работе. Если приложение "performance critical" то их лучше не использовать. Впрочем это явно не про студенческие лабы.
Я вроде использую что ни наесть стандартные двумерные прямоугольные массивы. Есть решения, которые позволяют работать с такими данными быстрее?
jagged-arrays же.
Но если тебе только для лабы, то можешь не заморачиваться. Просто на работе могут сказать чтобы не юзал их.
То же не понимаю, ведь они один фиг лежат в памяти подряд строка-за-строкой.
Желательно только ходить по ним последовательно и горизонтально что кэш проца работал.
>То же не понимаю, ведь они один фиг лежат в памяти подряд строка-за-строкой.
Там это связано с плохой реализацией.
http://stackoverflow.com/questions/597720/what-are-the-differences-between-a-multidimensional-array-and-an-array-of-arrays
>If you write some simple code using jagged and multidimensional arrays and then inspect the compiled assembly with an IL disassembler you will see that the storage and retrieval from jagged (or single dimensional) arrays are simple IL instructions while the same operations for multidimensional arrays are method invocations which are always slower.
из конроллера во вюху передаю list<person>. во вюхе обозначил
>@model list<test.model.person>
данные вывожу через foreach.
но есть проблема.
мне на этой же странице надо добавить форму, которая должна быть написана на шарпе(тобишь html.editfor/labelfor и др.), но т.к. у меня модель - перечисление, то нихуя так не получится?
Просто не юзай строго-типизированные хелперы, а используй обычные html-теги, либо хелперы, которые строки принимают. В чем проблема?
задача состоит именно в этом. я уже ебанулся с этой хуйней. нужно использовать именно хелперы
Ну так я и написал - используй обычные хелперы по-типу @Html.TextBox("Название поля")
На macOS с CoreClr разница не такая большая - пик1
Все намного хуже, если сравнивать с MONO - пик2
MONO в работе с массивами сейчас рвет CoreClr в ~40 раз
Если в MONO увеличить кол-во интераций до 100 (разогреть), то разница увеличивается.
Вообщем хорошо что в ASP.NET редко приходится возиться с массивами чисел.
Но что их уровень настолько низок - не знал.
И уж точно не подозревал, что хамарин "программисты" не слышали про FireBase TestLab. А господа дуднет-рабов из мелкософта понтуются библиотечками для распознавания лиц, и совместимостью с Linux в 2016.
Посмотрев мельком скрины в треде, стало понятно, что в мелкософте есть 2 типа дизайнеров: офисная крыса с кризисом среднего возраста, которая уже лет 10 пьёт чаёк, и молодой любитель лсд, который учится по заветам старшего.
Ладно, дебилы, поссал на вас - и пошёл дальше работать
мимо-джава-господин-150к
Учусь на очке, работаю разрабом под .core в Екатеринбурге, подал просто на шару, взяли =)
Хуячим жирное asp.net core приложение, что ж еще)
>Спидом еще на заразился? :3
Через интернет не передается
Установи обе версии - в чем проблема? 2017 сгодится как песочница какая-нибудь, где поиграться можно. А в 2015 можешь что-то писать / открыть другие проекты у которых будут проблемы с совместимостью из под 2017 студии.
Спроси у мамки, если разрешит, то можно.
да, студии уже давненько независимо друг от друга устанавливаются и друг другу не мешают
Есть класс с двумя функциями, назовем скажем Foo() и Bar()
Функцию Foo() вызываю я сам, функцию Bar() вызывает другой элемент фреймворка, в неизвестный момент времени после вызова метода Foo(). Вопрос: Как мне, фп-way, передать некое значение из метода Bar() в точку вызова метода Foo()?
Если кому-то интересно - язык C#, платформа Xamarin.Android
Исходники - http://pastebin.com/NLuNXA6c если убрать все лишнее
Ну а как ты сейчас определяешь что OnActivityResult вызвался и нужно вызвать Login?
OK, раз методы вызываются в разное время тут без промисов не обойтись.
Я бы заюзал Task + TaskCompletionSource
Еще что бы не забивать активити лишним кодом, вынес бы логику в отдельный класс PromiseFactory
и положил бы в какую-нибудь папочку типа Utils или Common
Кстати, там можно сделать чуть проще.
Заменив
readonly List<TaskCompletionSource<T>> sources = new List<TaskCompletionSource<T>>();
на event Action<T> notify;
Никакими и всегда их на хую вертел. Не понимаю нахуя они и какой от них профит, кроме гемора.
Я тоже вкатываюсь, только мне больше интересен десктоп. Пока, чтобы набить руку, решаю элементарнейшие задачи для студентиков - уже нашел нашёл множество моментов, которые были не так очевидны. Если у тебя с этим (базой) проблем нету, то просто начни делать сайты, в чем проблема? Сейчас популярны всякие интернеты вещей. прикрути прослойку между, например, народмоном и телеграммом. Двач имеет апи, сделай сайт которой этот апи бы использовал. Исходить нужно не из выучу язык -> придумаю задачу, а наоборот - вижу задачу, использую язык для ее решения.
Ninject - медленный
Spring.NET - еще более медленный
Unity - не сказать, что пользовался. так, на проекте был, мне не мешал, сам никуда не лез. ничего особенного сказать не могу
Structuremap - последние версии, которыми я пользовался, имели просто охуительный эффект, связанный с уровнем доверия к сборкам, т.к. использовал рефлексию во всех загруженных сборках при старке. и посему приходилось там, где не надо, явно указывать подобные секьюрити вещи, что, мягко говоря, печально подходит к сереезным приложениям. надо отдать должное, самый негемморный (если не считать вышеописанного) при встраивании в многослойные аппликухи (ну как по мне). параллельный отряд товарищей работал с ним на супир-пупир-большом приложении, им ничего не мешало. возможно, дело во мне
ServiseStack - ничего особенного
Microsoft.DependencyInjection - я уже бугуртил где-то выше по поводу него. ну так-то, в целом, резолв делает. что еще от него надо?
Тереблю вот этот список https://tproger.ru/digest/competitive-programming-practice/
Особенно понравился вот этот сайт http://www.itmathrepetitor.ru/zadachi-po-programmirovaniyu/ - полный набор: арифметика, классы, гуи, многопоточность и прочее и прочее.
Железо core i5, 8gb ram 250 ssd.
а если с отладкой, есть что-то подозрительное в диагностических сообщениях?
например ты увидишь, какой из шагов выполняется долго и вообще, что происходит в момент запуска приложения (возможно не нужного на этапе запуска)
SimpleInjector пробовал? У меня на предыдущем месте работы его активно использвали. По скорости к сожалению не могу сказать в сревнении с остальными контейнерами, но настраивать и использовать удобно.
В одной из больших таблиц сравнения контейнеров simpleinjector ебет всех по скорости кроме ручного new конечно же
я активно защищаю ninject иль ты просто к слову?
не только autofac пытается поддерживать ~core, в отличии от того же всего остального
>>884864
глянув на статистику https://github.com/danielpalme/IocPerformance, решил DryIoc заюзать. но потом все плюнул и вернулся к дефолтному Microsoft.DependencyInjection посчитав, что на данном этапе бОльшим геморроем является его настройка, а профит, возможно, не так уж и заметен
>>884870
не всех
Коротко задача: обнулить в числе каждое вторую цифру:
>45678 -> 40608.
Какими средствами лучше всего будет воспользоваться для такой задачи?
У меня в голове как минимум 2 решения: StringBuilder и конвертация в промежуточный числовой массив, но мне они кажутся слишком монструозными. Мб есть какое-то более оптимальное решение?
а что в StringBuilder тебе кажется монструозным? не, ну смотря, что ты собираешься сделать, конечно. но с его помощью все решение упрется в один цикл и даже без ифа
string s = Console.ReadLine();
s.ToCharArray
Дальше пробегаешься и заменяешь пробелами, потом каким-нибудь Split или что там убираешь пробелы.
Можно изменить саму строку через unsafe-код. Но если она используется в другом месте, то это может привести к багам.
>Какими средствами лучше всего будет воспользоваться
new Regex("(\\d)\\d").Replace(... дальше сам
Можно тут подробнее?
А расскажите про промиссы, плз
заебись DI, и поддержка на PCL годная и core
пик (заменили List<T> проста на C# event)
>>884985
>А расскажите про промиссы, плз
Это когда вместо результата ты возвращаешь "обещание когда-нибудь верунуть результат"
В комбинирование с await позволяет писать линейный простой код.
https://ru.wikipedia.org/wiki/Futures_and_promises
не более того, что ты сам можешь найти
>Output -> Debug
Какой output?
Если ты говоришь про обычный f5, то какие сообщения, никогда не было
Неплохо, хотя первый вариант понравился больше. Где подсмотрел такую годноту (про первый вариант тоже)?
есть такая вещь как модальное окно Output в Visual Studio
когда билдишь приложение, например, тебе в него пишут всякую хуйню типа 1> Projectname start task compile. так вот, там есть дропдаун, в котором можно выбрать Debug
Не бывает 100% программ даже когда пишешь на Clojure, а мы тут вообще говорим про OOP язык C#.
Функциональным должно быть ядро / биз.логика, а инфраструктура может быть любой.
Че грубишь? Я посмотрел, мало что полезного, вот и спрашиваю: может в каких-то особых кейсах, или может я не знаю каких-то инсайдов
[DllImport("kernel32.dll", SetLastError =true)]
static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength);
через p/invoke?
что делать, если при вызове функции для произвольного уже работающего процесса появляется исключение: Access Denied?
на msdn'е грят, что у процесса должен быть какой то enum стоять в ACCESS_ALL_ALLOWED, который воткнуть, похоже, можно только при создании, и что тогда делать с уже работающими процессами?
алсо, при вызове функции скармливаю ей следующие параметры:
VirtualQueryEx(theProcess.Handle, new IntPtr(), out MBI, Marshal.Sizeof(typeof(MEMORY_BASIC_INFORMATION)));
где theProcess - процесс, MBI - экземпляр структуры MEMORY_BASIC_INFORMATION, описанной в соответствии с "ГОСТом" или как это блять правильно назвать, стандартом с++-функции?
ну тут поц пытается нотэпад просканировать этим методом: https://www.codeproject.com/articles/716227/csharp-how-to-scan-a-process-memory. подсмотри различия чтоли
а вот тут ньюанс, у меня нормально считывает инфу с хрома и ноутпада. думаю, есть еще какие нибудь процессы, о которых можно получить эту инфу, но я пока что не понял, по какому признаку различать такие процессы, и мне не нужно, чтобы такой признак вообще был. я хочу получить memory basic information любого процесса, но за ссылку посмотрю, мб найду что нибудь нового
Ты эту поебень читал?
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366907(v=vs.85).aspx
да у меня уже заработало. как оказалось, у процесса из System.Diagnostics некошерно брать дескриптор, нужно, блять, через другую pinvoke функцию (см статью вот этого анона >>885855
, спасибо кстати) взять хэндл интересующего процесса, и только потом искать MSI, ну и я структуру MEMORY_SYSTEM_INFO заколхозил, теперь она отличается от каноничной - всё, что не указатель - long. хуйня эти ваши инвоуки, вообщем потому что от них у меня горит очаг.
Я хочу податься в веб(студентота), как у вас с этим дела?
PHP - язык нелюдей и опущенцев.
Python - язык хипстеров с подворотами.
Ruby - нет работ.
А что касательно связок Asp.net/typescript? Можно ли найти работу разбираясь с этой области? Или лучше таки PHP? Я слышал что он отмирает в угоду node.js, но всё ж таки? js очень уж нелогичный язык, мне неприятно на нем писать. А C# очень нравится, был бы рад приобщиться, но нужна сводка по работам. Живу в мухосранске и если у нас что-то есть - то только по php, так что ориентир на фриланс.
> ruby - нет работ
сирисли?
> ориентир на фриланс
на фрилансе, насколько я знаю, тоже доминирует рнр и питоны всякие. ну, руби точно есть, насчет asp здешние товарищи убеждали, что работы хватает, но я не встречал прям большого выбора (потомушто не искал)
Cтэк:
N-tier
asp MVC
autofac
EF CodeFirst
Должно быть 4 слоя:
1) Репозиторий (Абстрагирует от типа БД)?
2) Домен (Хранит сущности с помощью которых заполняется БД по средствам EFCF??)
3) Сервисы (Реализация интерфейсов репозитория??)
4) MVC(Это просто UI? БизЛог в отдельном проекте?)
Помоги пожалуйста, я все правильно понимаю или нет?
Буду искренне благодарен!
это ты начертил мегасхемку? если нет, то даже не знаю, что это значит
mvc - слой, реагирующий на действия пользователя. тут же происходит валидация инпутов, правильное составление ответа юзеру
сервисы - и есть твоя бизнес-логика
домен - можно сказать, это набор комплексных операций с моделью/моделями
репозиторий - круд, отвязанный от конкретной базы данных
И это блять курсовая? Ебануться, у меня диплом и того меньше.
Поясни, пожалуйста, за платформо-совместимость или ссылкой, чтобы это было поподробнее расписано.
любой говногайд в интернетах типа "как песать тесты на сешарп анлайн учебник"
Шарящие анонычи, подскажите. Работаю сейчас в C# с Windows Forms под Visual Studio 2012. Проблема такая, есть 2 одинаковых набора всяких объектов интерфейса (надписи, групбоксы с радио-кнопками, просто кнопки), хочу их загнать в какую-то структурку, чтобы не дублировать один и тот же код с разными названиями кнопочек.
Типа есть
group1Btn1.Visible = false;
...
group2Btn1.Visible = false;
А хочу чтобы было примерно
group = group1;
group.Btn1.Visible = false;
...
Главный вопрос: как можно автоматизировать весь этот процесс замены первого варианта на второй? Или мб есть еще какие-то иные варианты для решения проблемы?
выделяешь интерфейс -> инкапсулируешь поведение конкретных контролов
Просто про юниттесты - книга 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 жизнь не мила.
сори за неровный почерк, пишу с чучелки
Да, я рисовал. Спасибо большое!
Это копия, сохраненная 17 декабря 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.