【发布时间】:2015-08-20 20:47:15
【问题描述】:
我已经阅读了静态的优点/缺点,但从性能的角度来看,我不确定在我的情况下如何做到这一点。
我有一个classA 有不同的变量,还有函数 有定时器:
class ClassA
{
// More vars...
private System.Timers.Timer _values;
public ClassA(IntPtr handle, String t)
{
_handle = handle;
_title = t;
CheckRoutineAndContinue();
}
CheckRoutineAndContinue 在哪里:
private void CheckRoutineAndContinue()
{
_values= new System.Timers.Timer();
_values.Elapsed += delegate { Check(); };
_values.Interval = 200;
_values.AutoReset = false;
_values.Start();
}
private void Check()
{
if (_max> 5) StopCheck();
else
{
// Logic...
_max++;
}
private void StopCheck()
{
if (_values!= null)
{
_values.AutoReset = false;
_values.Enabled = false;
_values.Stop();
}
}
我的问题是:我将拥有多个 ClassA 对象。如果我为CheckRoutineAndContinue() 创建一个静态方法,它只会创建一次,我可以将我需要使用的参数传递给它,而如果我在我的类中有它,我不需要发送 ClassA 的变量并将只能创建一次。所有 ClassA 对象执行的代码都是相同的,但每个对象的变量值不同。
这是创建静态方法并以某种方式通过参数传递所有变量的好时机,因此这些函数只创建一个,还是建议将这些函数放在同一个类中,即使它们将被创建每次我创建一个新的 ClassA 对象?
假设在这种情况下测试没什么大不了的。
我会假设静态方法会更好,因为每次都会再次创建函数,但我不是 100%,而且我不确定静态方法是否可以正确处理计时器,因为我需要根据需要启动-停止它关于定时器内部函数的逻辑。
【问题讨论】:
-
如果您使用静态函数,它可能确实(一点点)更快,但您将失去对类成员变量的访问权限。在大多数情况下,这将严重违反 OOP。
-
如果您有“哪个更快”的性能问题,获得正确答案的方法是测试这两种方法。
-
@Blorgbeard 好吧,我也想知道这样做的“正确方法”是什么。但是,是的,你的答案也是正确的。
-
@PhillipH:见stackoverflow.com/questions/169378/…
-
糟糕,我的错,是的,您也可以访问私人成员。但是,这仍然会导致非常尴尬的编程。
标签: c# multithreading timer static