一个公共数据访问类中的问题。。。

NetColorWolf 2003-02-14 12:40:00
现在有两种方案,请大家说说自己的想法:
一:在公共数据访问类中定义一数据对象实例,比如DataSet, DataTable, DataAdapter等,在使用时,每次都先初始化后再用这个实例,而不是用new

二:象petshop中的一样,每次都new一个实例,再用use语句自己释放掉

第一种方式,主要是基于效率考虑的,用初始化,而不用new时间和空间效率应该高一些,不过存在的问题是,多次执行时,不能保存旧有的值,对datarow这种类,就很不好处理;
而第二种方式,每次都new,用.net的垃圾收集,但效率可能不高。
请大家说说吧,谢谢!!
...全文
31 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
webdiyer 2003-02-18
  • 打赏
  • 举报
回复
哦,对不起,我那个方法错了,应该加上返回类型string:
public static string GetMyString(){
return "hello,world!";
}
NetColorWolf 2003-02-16
  • 打赏
  • 举报
回复
谢谢各位,我现在决定这样处理:
  对SqlConnection,CommandBuilder,SqlCommand,DataAdapter这类不需要保存旧有的值的对象,在公共类中只存在一个实例
  而对DataSet,DataTable这类有可能取旧有值对对象,就每次访问,都new一次,最后用.NET自己收集
qqchen79 2003-02-15
  • 打赏
  • 举报
回复
关键是采用new的方法究竟会慢多少?我个人的感觉是3-4%左右,虽然你最好还是自己做一下试验。对象内存分配在.NET里面非常快,GC也只会隔很长一段时间才进行一次。
如果采用第二种方法,如你所说,需要许多逻辑判断的话,我认为如果效率上的改进不大,没有必要。
webdiyer 2003-02-14
  • 打赏
  • 举报
回复
我用第一种方法,把要使用的公共方法做成静态的,如:
public static GetMyString(){
return "hello,world!";
}
调用时不需new,这样:
string mystr=MyCommon.GetMyString();
NetColorWolf 2003-02-14
  • 打赏
  • 举报
回复
用 cxx1997(小网虫_L) 的方法应该还是不行:

因为m_DataTable是static,所以第二次执行execsql()时,m_DataTable中的数据还是已经改变了:(
kills 2003-02-14
  • 打赏
  • 举报
回复
webdiyer说的办法似乎不行,编译的时候提示错误,说是没有返回类型
cxx1997 2003-02-14
  • 打赏
  • 举报
回复
public class db
{


private static DataTable m_DataTable;
public DataTable execsql(param...)
{
if (m_DataTable==null)
m_DataTable=new DataTable();
...
m_Adapter.Fill(m_DataTable);
return m_DataTable;
}
}
NetColorWolf 2003-02-14
  • 打赏
  • 举报
回复
UP
NetColorWolf 2003-02-14
  • 打赏
  • 举报
回复
但用第一种方式有这个问题,前面忘记说了。
比如有这样一个公共数据访问类:
public class db
{
private DataTable m_DataTable;
public DataTable execsql(param...)
{
...
m_Adapter.Fill(m_DataTable);
return m_DataTable;
}
}

现在,我有这样一个实际的调用序列:
DataRow dr = db.execsql('select * from table1').Rows[0];
string a = dr[0];
string b = dr[1];
//现在我需要用dr[2]的值从数据库中来得到另一个值,有可能是一个下拉列表,需要邦定值
DropDownList1.datasource = db.execsql('select c1, c2 from table2 where c3 = ' + dr[3]);
DropDownList1.bind();
//注意,下面这句的数据将出错,因为这个时候,DB中的m_DataTable已经不对了
string c = dr[4];
poetc 2003-02-14
  • 打赏
  • 举报
回复
gz
leeyoong 2003-02-14
  • 打赏
  • 举报
回复
UP
NetColorWolf 2003-02-14
  • 打赏
  • 举报
回复
我自己顶

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧