none
asp.net中数据库访问类是否都应该用static? RRS feed

  • 问题

  •  这是我今天写程序时突然想到的,不知道对不对恳请勘正:

        我包括我看到的一些例子,都是把访问数据库的相关操作封装到一个类中,然后再每个aspx页面实例化一个数据库操作类的实例进行操作,我今天做的例子里他把数据库中的方法都写成静态方法如:
        public static bool getDataReader()
        { ..........}
    这样就不必在每个页面实例化一个类。

     

        我突然想到的是:在每个页面实例化一个实例,在有很多人访问网站时,它是否要实例化好多实例呀?这样应该对性能有所影响吧?或者说会频繁地启动垃圾回收!

     或者可以这样问:什么时情况下适合用static?

      我的一点理解:是不是 假如一个类 Class1中有100个方法,我不用静态方法static时,实例化(Class1 c = new Class1)需要分配10K内存,而把类Class1中的方法都改成static 实例化类时也许就用1K内存了?因为static 方法不属于某个实例。


    初学者
    2010年4月10日 16:38

答案

  • 在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象反之使用静态方法。
    2010年4月11日 3:02
  • static往往也是导致出现莫名问题的原因,使用的时候需要十分注意
    【孟子E章】
    2010年4月11日 7:25
    版主
  • 你好,用不用Static对数据库性能影响不是很大,更大的区别是程序设计上,对Static概念理解不透彻,有些时候出问题了,比较难查出来,隐藏的比较深。
    邹俊才
    2010年4月12日 1:15
    版主
  •  这是我今天写程序时突然想到的,不知道对不对恳请勘正:

        我包括我看到的一些例子,都是把访问数据库的相关操作封装到一个类中,然后再每个aspx页面实例化一个数据库操作类的实例进行操作,我今天做的例子里他把数据库中的方法都写成静态方法如:
        public static bool getDataReader()
        { ..........}
    这样就不必在每个页面实例化一个类。

     

        我突然想到的是:在每个页面实例化一个实例,在有很多人访问网站时,它是否要实例化好多实例呀?这样应该对性能有所影响吧?或者说会频繁地启动垃圾回收!

     或者可以这样问:什么时情况下适合用static?

      我的一点理解:是不是 假如一个类 Class1中有100个方法,我不用静态方法static时,实例化(Class1 c = new Class1)需要分配10K内存,而把类Class1中的方法都改成static 实例化类时也许就用1K内存了?因为static 方法不属于某个实例。


    初学者


    记住在asp.net中,static类型的变量时全局变量,所有的用户都会共享这个变量的。不能滥用哈。

    2010年4月12日 2:43
  • static本身也是一个类,只不过全局就只有一个,也就意味着并发能力为0。不过往往在static里面再处理并发和互斥。

    一般用static来做类厂,获得一个类对象,然后操作。这样的好处是即利用了static的便利性,又可以有并发,还可以在这个类厂中做缓存等。

    感觉用static唯一的好处就是可以少写n多连接参数,其他的区别不大。


    霸王
    2010年4月12日 3:20

全部回复

  • 在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象反之使用静态方法。
    2010年4月11日 3:02
  • 数据库访问类只执行数据库操作和返回结果,使用静态类是很合适的。
    2010年4月11日 3:05
  • static往往也是导致出现莫名问题的原因,使用的时候需要十分注意
    【孟子E章】
    2010年4月11日 7:25
    版主
  • 你好,用不用Static对数据库性能影响不是很大,更大的区别是程序设计上,对Static概念理解不透彻,有些时候出问题了,比较难查出来,隐藏的比较深。
    邹俊才
    2010年4月12日 1:15
    版主
  •  这是我今天写程序时突然想到的,不知道对不对恳请勘正:

        我包括我看到的一些例子,都是把访问数据库的相关操作封装到一个类中,然后再每个aspx页面实例化一个数据库操作类的实例进行操作,我今天做的例子里他把数据库中的方法都写成静态方法如:
        public static bool getDataReader()
        { ..........}
    这样就不必在每个页面实例化一个类。

     

        我突然想到的是:在每个页面实例化一个实例,在有很多人访问网站时,它是否要实例化好多实例呀?这样应该对性能有所影响吧?或者说会频繁地启动垃圾回收!

     或者可以这样问:什么时情况下适合用static?

      我的一点理解:是不是 假如一个类 Class1中有100个方法,我不用静态方法static时,实例化(Class1 c = new Class1)需要分配10K内存,而把类Class1中的方法都改成static 实例化类时也许就用1K内存了?因为static 方法不属于某个实例。


    初学者


    记住在asp.net中,static类型的变量时全局变量,所有的用户都会共享这个变量的。不能滥用哈。

    2010年4月12日 2:43
  • static本身也是一个类,只不过全局就只有一个,也就意味着并发能力为0。不过往往在static里面再处理并发和互斥。

    一般用static来做类厂,获得一个类对象,然后操作。这样的好处是即利用了static的便利性,又可以有并发,还可以在这个类厂中做缓存等。

    感觉用static唯一的好处就是可以少写n多连接参数,其他的区别不大。


    霸王
    2010年4月12日 3:20