C# 'касательно' ключевого слова, производительности

В Cordova, в папке libs, есть файл, который мы установили в пути сборки. я обновил cordova и обновил файл jar, но забыл удалить старый файл jar в папке libs. убрал старый и проект работал как шарм!

12
задан Peter Mortensen 12 July 2015 в 17:56
поделиться

4 ответа

Bitmap является ссылкой тип. Передача ссылочного типа по значению не копирует объект, а просто ссылку на объект. Передача Bitmap по ссылке, а не по значению не повлияет на производительность.

32
ответ дан 2 December 2019 в 02:55
поделиться

Поскольку Bitmap является ссылочным типом, практической разницы в производительности в этом сценарии нет, поскольку он уже передается по ссылке на метод.

Я бы порекомендовал статью Джона Скита на эту тему для подробного объяснения того, как «по ссылке» и «по значению» работают в C #.

17
ответ дан 2 December 2019 в 02:55
поделиться

'ref' не передает сам объект в функцию, вместо этого он передает ссылку на переменную, в которой он хранится / at.

Если объект является классом или интерфейсом, то всякий раз, когда вы обращаетесь к этой переменной в функции, он должен разыменовать ее, а затем получить доступ к переменной. Если бы он был передан без ключевого слова 'ref', тогда ему не пришлось бы выполнять шаг разыменования (таким образом, он будет немного быстрее).

Если объект является структурой (или перечислением, или другим базовым типом), ключевое слово 'ref' передает ссылку на переменную, в которой хранится структура, который по-прежнему вызывает СЛАБЫЙ удар скорости разыменования всякий раз, когда вы его используете, но если вы его не укажете, программа должна выделить память для нового экземпляра структуры, а затем скопировать ее. В большинстве случаев быстрее передавать структуры через ключевое слово ref, но это может быть не так, если это действительно маленькая структура или если она сильно разыменована (я имею в виду МНОГО).

Итак, если вы передают структуру, то обычно можно использовать ref, иначе особой разницы не будет (накладные расходы на этапе разыменования незначительны).

Да, и чтобы ответить на вопрос, Bitmap является классом, поэтому ключевое слово 'ref' не будет иметь большого значения в скорости по сравнению с параметром, отличным от'ref '.

тогда программа должна выделить память для нового экземпляра структуры, а затем скопировать ее. В большинстве случаев быстрее передавать структуры через ключевое слово ref, но это может быть не так, если это действительно маленькая структура или если она сильно разыменована (я имею в виду МНОГО).

Итак, если вы передают структуру, то обычно можно использовать ref, иначе особой разницы не будет (накладные расходы на этапе разыменования незначительны).

Да, и чтобы ответить на вопрос, Bitmap является классом, поэтому ключевое слово 'ref' не будет иметь большого значения в скорости по сравнению с параметром, отличным от'ref '.

тогда программа должна выделить память для нового экземпляра структуры, а затем скопировать ее. В большинстве случаев быстрее передавать структуры через ключевое слово ref, но это может быть не так, если это действительно маленькая структура или если она сильно разыменована (я имею в виду МНОГО).

Итак, если вы передают структуру, то обычно можно использовать ref, иначе особой разницы не будет (накладные расходы на этапе разыменования незначительны).

Да, и чтобы ответить на вопрос, Bitmap является классом, поэтому ключевое слово 'ref' не будет иметь большого значения в скорости по сравнению с параметром, отличным от'ref '.

7
ответ дан 2 December 2019 в 02:55
поделиться

Какой тип вы используете для хранения растрового изображения? Например, System.Drawing.Bitmap - это ссылочный тип / класс. Когда вы передаете ссылку на метод (в качестве аргумента), ссылка передается по значению. ( Создается копия ссылки ... не объект ) Таким образом, для хранения копии на 32-битной машине будет выделено четыре байта.

Использование ключевого слова ref не имеет большого отношения к производительности, за исключением того, что передается та же ссылка (копия ссылки не делается). Он имеет следующие преимущества

  • Только очищает намерение, что метод, принимающий параметр , может изменить его , и вызывающий может получить измененное значение после выполнения.
  • И переменная должна быть инициализирована вызываемым объектом перед передачей в качестве аргумента вызываемой функции, принимающей параметр ref.
9
ответ дан 2 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: