PDA

View Full Version : سوال: چطور در متدی که یک کوری mysql اجرا میکنه، منابع رو آزاد کنم؟



ar.mahdian
چهارشنبه 27 مهر 1390, 15:44 عصر
سلام
در یک برنامه که قراره همیشه در حال اجرا باشه یک سری کوری مرتبا اجرا میشن. من این کوریها رو درون یک سری متد جا دادم و فراخوانی میکنم اما به نظرم زیاد بهینه نیستند.
چطور میشه اونها رو طوری بهینه کرد که بعد از اجرا حافظه رو آزاد کنند؟
این متدها در زبان ++c و با کانکتور mysql که خود اراکل داده ساخته شده و در محیط لینوکس باید اجرا بشه:
متدی برای اجرای select
sql::ResultSet * f1() {
sql::Driver* driver = get_driver_instance();
std::auto_ptr<sql::Connection> con(driver->connect(url, user, pass));
con->setSchema(database);
std::auto_ptr<sql::Statement> stmt(con->createStatement());

const char* sql = "select * from t1;";
con->close();
sql::ResultSet * rs = stmt->executeQuery(sql);
stmt->close();
return rs;
}

متدی برای اجرای دستوری غیر از select

int f2() {
string sql = "UPDATE t1 SET num=1";
sql::Driver* driver = get_driver_instance();
std::auto_ptr<sql::Connection> con(driver->connect(url, user, pass));
con->setSchema(database);
std::auto_ptr<sql::Statement> stmt(con->createStatement());


return stmt->executeUpdate(sql.data());
}

البته متد اول وضعیت بهتری داره و اگر بعد از اجرا ResultSet خروجی اون رو close کنیم عالی میشه.مثلا

sql::ResultSet* rs;
rs = f1();
cout << rs->rowsCount();
rs->close();

ولی متد دوم وضعیت جالبی نداره
ممنون میشم راهنمایی کنید