
9 хитростей для работы с Visual Studio Code

User
.NET – управляемая среда выполнения. Это означает, что в ней представлены высокоуровневые функции, которые управляют вашей программой за вас (из Introduction to the Common Language Runtime (CLR), 2007 г.):
Среда выполнения предусматривает множество функций, поэтому их удобно разделить по следующим категориям:
- Основные функции, которые влияют на устройство других. К ним относятся:
- сборка мусора;
- обеспечение безопасности доступа к памяти и безопасности системы типов;
- высокоуровневая поддержка языков программирования.
- Дополнительные функции– работают на базе основных. Многие полезные программы обходятся без них. К таким функциям относятся:
- изолирование приложений с помощью AppDomains;
- защита приложений и изолирование в песочнице.
- Другие функции – нужны всем средам выполнения, но при этом они не используют основные функции CLR. Такие функции отражают стремление создать полноценную среду программирования. К ним относятся:
- управление версиями;
- отладка/профилирование;
- обеспечение взаимодействия.
Видно, что хотя отладка и профилирование не являются основными или дополнительными функциями, они находятся в списке из-за ‘стремления создать полноценную среду программирования’.
Есть у меня маленький и уютный pet-project, который позволяет качать файлы из интернета. Файлы при этом группируются и пользователю отображается не каждый файл, а некоторая группировка. И весь процесс скачивания (и отображение этого процесса) сильно зависел от данных. Данные при этом получались на лету, т.е. пользователь запускает на скачивание и нет никакой информации, сколько придётся качать в реальности.
Наивная реализация хоть какого-то информирования сделана простой — отображается прогресс скачивания как отношение количества скачанных к общему количеству. Информации для пользователя не много — просто ползущая полоска, но это уже лучше чем ничего, и это заметно лучше чем популярный нынче механизм загрузки без индикации прогресса.
И тут появляется пользователь с логичной проблемой — на большой группировке непонятно, почему прогресс еле ползёт — много файлов надо скачать или низкая скорость? Как я упоминал выше — количество файлов заранее неизвестно. Поэтому, я принял решение добавить счетчик скорости.
Хорошая практика — посмотреть тех, кто уже решал аналогичную задачу, чтобы не изобретать велосипед. Разный софт закрывает этим разные задачи, но выглядит отображение довольно одинаково:
uTorrent | DownloadMaster |
---|---|
![]() |
![]() |
Ключевой момент, который я выделил для себя — в первую отображение скорости нужно на текущий момент времени. Не какая скорость была средней, не какая скорость в целом средняя с момента начала, а именно какова эта цифра на текущий момент. На самом деле это важно, когда дойду до кода — поясню отдельно.
Итак, нам нужна простая цифра вида 10 MB/s
или что-то подобное. Как же нам её посчитать?
Эта шпаргалка поможет вам подготовиться к техническому собеседованию, чтобы вы могли освежить в памяти ключевые вещи. По сути, это содержание курса по информатике безо всяких подробностей.
В отличие от научных статей, статьи данного типа сложно переводить "близко к тексту", приходится проводить довольно сильную адаптацию. По этой причине приношу свои извинения, за некоторую вольность, с моей стороны, в обращении с текстом исходной статьи. Я руководствуюсь лишь одной целью — сделать перевод понятным, даже если он, местами, сильно отклоняется от исходной статьи. Буду благодарен за конструктивную критику и правки / дополнения к переводу.
Пространство имен System.Threading.Tasks
и класс Task
впервые были представлены в .NET Framework 4. С тех пор, этот тип, и его производный класс Task<TResult>
, прочно вошли в практику программирования на .NET, стали ключевыми аспектами асинхронной модели, реализованной в C# 5, с его async/await
. В этой статье я расскажу о новых типах ValueTask/ValueTask<TResult>
, которые были введены с целью повышения производительность асинхронного кода, в тех случаях, когда ключевую роль играют накладные расходов при работе с памятью.
Компания Apple активно внедряет в массы идею о том, что теперь-то с приватностью данных пользователей их продукции всё в порядке. Но исследователи из Hexway выяснили, что стандартный и активно используемый механизм Bluetooth LE (BLE) позволяет узнать довольно много о твоем айфончике.
Если Bluetooth включен, то любой человек в радиусе действия сигнала может узнать:
В своей практике я часто встречаю, в различном окружении, код вроде того, что приведен ниже:
[1] var x = FooWithResultAsync(/*...*/).Result;
//или
[2] FooAsync(/*...*/).Wait();
//или
[3] FooAsync(/*...*/).GetAwaiter().GetResult();
//или
[4] FooAsync(/*...*/)
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
//или
[5] await FooAsync(/*...*/).ConfigureAwait(false)
//или просто
[6] await FooAsync(/*...*/)
Из общения с авторами таких строк, стало ясно, что все они делятся на три группы:
Result/Wait/GetResult
. Примеры (1-3) и, иногда, (6), типичны для программистов из этой группы;Возможен ли риск, и на сколько он велик, при использовании кода, как в приведенных выше примерах, зависит, как я отмечал ранее, от окружения.