2014-01-28 32 views
0

我有一个故事板,我需要在整个程序中启动和停止。故事板作为本地变量和实例字段

 private void beginStoryBoard() 
     { 
      UserControl loadingAnimation = Application.Current.MainWindow.FindResource("loadingAnimation") as UserControl; 
      Storyboard storyboard = loadingAnimation.FindResource("ProgressAnimation") as Storyboard; 
      storyboard.Begin(); 
     } 

     private void stopStoryBoard() 
     { 
      UserControl loadingAnimation = Application.Current.MainWindow.FindResource("loadingAnimation") as UserControl; 
      Storyboard storyboard = loadingAnimation.FindResource("ProgressAnimation") as Storyboard; 
      storyboard.Stop(); 
     } 

是更好地保持故事板作为每个方法的局部变量: 因为它只有在两种方法中使用?或者我应该创建一个私人实例字段?以下是我认为的优点/缺点(如果需要,请纠正我),哪种情况最好?

 
With a local var: 
Pro: the var gets scraped once the method completes 
Con: extra methods need to be called each time 

With an instnace field: 
Pro: FindResource() method needs to be called only once 
Con: The instance field will take up memory throughout the life of the application 

回答

0

有了一个局部变量: 临:风险价值被刮掉,一旦该方法完成 缺点:额外的方法需要每次

这里的专业并不适用于被称为 - - 你不分配任何新的内存,只是创建一个指向现有对象的指针。只要MainWindow(仍然有对故事板实例的引用)处于打开状态,该对象的内存就不会被释放。

Con几乎不重要 - 查找Storyboard对象的方法只会在每次运行动画时运行一次,并且无论如何,它(我猜)只会花费几滴CPU来查看在哈希表(资源字典)中建立一个对象。

底线:this is a micro-optimization, and so it doesn't matter

+0

我明白你的意思了。 因此,无论如何,故事板对象都存在,创建一个局部变量并指向它并不会在内存方面产生差异,因为它只是一个指针。 那么内存方面哪个更好呢,还是两者差别很大? 在速度方面哪个更好?当然,使用实例字段会更快,因为在每次调用开始/结束storyboard()时都不需要调用FindResource()方法(两次)? –

+0

@Backwards_Dave,但'FindResource'是一个哈希查找 - 这就像你可以得到的一样快。所以肯定的是,也许有点慢,但并不像你在每一个渲染框架中调用它,因为小的差异真的很重要。所以真正的差异是微不足道的 - 从代码可读性/维护角度来看,最好做任何事情。 – McGarnagle