#c# #wpf #visual-studio
#c# #wpf #visual-студия
Вопрос:
В моем приложении wpf я использовал threadTime как blow.
TimerCallback tcb = new TimerCallback(TimerTask);
tmrdetectchanges = new Timer(tcb, "", 100, tmrinterval);
private void TimerTask(object data)
{
DetectChanges();
}
Я только что передал » » параметру TimerTask, поскольку я его не использую. Есть ли какое-либо влияние на мою программу? В моем случае, нужно ли мне использовать этот параметр? Пожалуйста, сообщите. Спасибо.
Комментарии:
1. Я бы использовал String. Пустое вместо «». Это небольшая оптимизация.
2. @Red: Неверно; они компилируются в один и тот же IL.
Ответ №1:
Из MSDN:
public delegate void TimerCallback(Object state)
состояние
Тип: System.Объект
Объект, содержащий специфичную для приложения информацию, относящуюся к методу, вызываемому этим делегатом, или null.
Просто передайте вместо этого null.
Ответ №2:
это «почти» не влияет на вашу программу. Есть некоторые, но они настолько минимальны, что вы, вероятно, даже не заметили бы этого. Когда вы передаете «», он выделяет новый объект string в куче, поэтому в какой-то момент сборщику мусора придется найти его и освободить, что, я уверен, произойдет относительно быстро.
Поскольку вы не используете параметр пользовательских данных, просто передайте значение null. Совершенно корректно и экономит эти несколько циклов процессора (как для вызова, так и для сборки мусора)
РЕДАКТИРОВАТЬ: Как меня исправили другие, передача строки вместо null на самом деле практически не влияет. Однако вы все равно сэкономите несколько циклов процессора, если передадите значение null. Передача «» генерирует одну дополнительную инструкцию по сборке (по крайней мере, на стороне вызова), которая в вашем случае не имела бы смысла
Также обратите внимание, что я только проверил, что в debug сборка и выпуск могут быть оптимизированы, так что разницы вообще нет. Я уверен, что кто-нибудь поправит меня, если это так 🙂
Комментарии:
1. Строковые литералы не выделяются в куче.
2. почти уверен, что они в конечном итоге помещаются в коробку, если они передаются как тип объекта. Итак, строк нет, но к тому времени, когда они заканчиваются в обратном вызове, они есть.
3. Ссылки на ссылочный тип никогда не помещаются в коробку.