ado会产生内存碎片?
实现了一个SOCKET服务程序,根据客户端发来的数据查询数据库,然后将结果集数据编码返回给客户端。
数据库操作部分是产生了一个Connection对象,连接数据库后Recordset = Connection->Execute(查询的SQL语句...),通过Recordset取得数据然后编码发回客户端,再Recordset->Close();Recordset=NULL;释放。结果压力测试时服务程序连续运行两天两夜后莫名其妙地无故退出。try,catch都没用。后来想到可能是Connection->Execute频繁产生Recordset对象,释放,导致内存碎片,于是改成产生Recordset对象,调用Recordset->Open,数据处理完毕后Recordset->Close();但不调用Recordset=NULL完全释放,保留该对象,继续下一次的Open,结果问题解决。
现在服务程序要求加入数据库插入,更新,删除功能,看了看MSDN的说明,Command和Connection的Execute都是返回Recordset对象的,如果是不返回结果集的操作,比如insert,update,delete,返回的是一个关闭的Recordset,那这样会不会产生内存碎片呢?因为测试出结果最少要两天的时间,特在此向有经验的朋友请教。试了一下,Recordset->Open是可以执行insert,update,delete操作的,但无法取得影响的记录条数,即无法知道update,delete了多少条记录。