小项目,有人说static不好,因为会占着资源不放,但我看的很多人的代码都是static,包括微软的那个访问类。到底改怎么写?

解决方案 »

  1.   

    你问问他他知道占多少资源吗?可以计算出这种损失值几毛钱吗?static的问题,是在于可能造成你的程序在并发使用、或者嵌套使用时,程序垮掉。如果ADO.NET对数据库操作需要单独的DBConnection,而你弄个共享的,那么类似DBDataReader等等操作就会垮掉。你测试过并发多用户多页面使用、以及在一个使用DataReader的循环中嵌套创建和使用另一个DataReader的情况吗?
      

  2.   

    对于那些拿着必然存在的鸡毛,夸张地来当作决策依据的,其实可以不用太认真。你应该从从能可行上去考虑,特别是考虑到并发(因为asp.net处理客户端请求就是多线程的)情况下的功能可行性。根本不可行的功能,这就更谈不上去选择“省资源”的做法了。
      

  3.   

    public static SqlConnection con?这样写?
      

  4.   

    c/s的可以这样写的吧,B/S的就不行了
      

  5.   

    类不是静态的,类中获取数据的方法是静态的,类的字段,属性等也不是静态的,这样可以吧?另外我看有人这么写:
    public static readonly string cnstr=数据库连接字符串,这样好不好?
      

  6.   


    有什么毛病?我看到这样的代码public class DataAccess
    {
        private static OleDbConnection Conn = new OleDbConnection();
        private static OleDbCommand Cmd = new OleDbCommand();    public DataAccess()
        {    }    /// <summary>
        /// 打开连接
        /// </summary>
        public static void Open()
        {
            if (Conn.State.Equals(ConnectionState.Closed))
            {
                Conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source="
        + System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Gangxing.mdb");
                Cmd.Connection = Conn;
                Conn.Open();
            }
        }    /// <summary>
        /// 关闭连接
        /// </summary>
        public static void Close()
        {
            if (Conn.State == ConnectionState.Open)
            {
                Conn.Close();
                Conn.Dispose();
                Cmd.Dispose();
            }
        }
        public static DataSet GetDataSet(string sql)
        {
            try
            {
                Open();
                OleDbDataAdapter Da = new OleDbDataAdapter(sql, Conn);
                DataSet Ds = new DataSet();
                Da.Fill(Ds);
                return Ds;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message,e);
            }
            finally
            {
                Close();
            }
        }
      

  7.   

    一般类似于SqlHelper都是做成静态的。
      

  8.   


    就是说,数据访问类都不写成静态的,用到的地方new一个,这样是最好的是吗?
      

  9.   

    private static OleDbConnection Conn = new OleDbConnection();
     //有错误
    静态方法可以用,静态对象会有问题。
      

  10.   

    static 可以少些个new 方便那么点,为了那么点点方便不考虑并发确实有点犯了。
    小项目虽小但是也能看出一个人的编码习惯!