C # ThreadTimer объект для обратного вызова - PullRequest
0 голосов
/ 04 мая 2011

В своем приложении wpf я использовал ThreadTime в качестве bleow.

TimerCallback tcb = new TimerCallback(TimerTask);
tmrdetectchanges = new Timer(tcb, "", 100, tmrinterval);  

private void TimerTask(object data)
{
    DetectChanges();
}

Я только что передал "" параметру TimerTask, поскольку я его не использую.Есть ли какое-либо влияние на мою программу?В моем случае, мне нужно использовать этот параметр?Пожалуйста, порекомендуйте.Спасибо.

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

От MSDN :

public delegate void TimerCallback(Object state)

состояние

Тип: System.Object

Объектсодержит специфическую для приложения информацию, относящуюся к методу, вызываемому этим делегатом, или null .

Просто вместо этого передайте null.

2 голосов
/ 04 мая 2011

«почти» не окажет влияния на вашу программу. Есть некоторые, но они настолько минимальны, что вы, вероятно, даже не заметите этого. Когда вы передаете "", он размещает новый строковый объект в куче, поэтому в какой-то момент сборщик мусора должен будет найти его и освободить, что, я уверен, будет относительно быстрым.

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

РЕДАКТИРОВАТЬ: Как другие исправили меня, на самом деле почти нет никакого влияния, передавая строку вместо нуля. Однако вы все равно сохраните несколько циклов ЦП, если передадите ноль. Передача "" генерирует одну дополнительную инструкцию по сборке (по крайней мере, на вызывающей стороне), которая в вашем случае бесполезна

Также обратите внимание, что я только проверил, что в отладочной сборке и выпуске можно было оптимизировать, так что нет никакой разницы вообще. Я уверен, что кто-то исправит меня, если это так:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...