ar.mahdian
چهارشنبه 27 مهر 1390, 16: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();
ولی متد دوم وضعیت جالبی نداره
ممنون میشم راهنمایی کنید
در یک برنامه که قراره همیشه در حال اجرا باشه یک سری کوری مرتبا اجرا میشن. من این کوریها رو درون یک سری متد جا دادم و فراخوانی میکنم اما به نظرم زیاد بهینه نیستند.
چطور میشه اونها رو طوری بهینه کرد که بعد از اجرا حافظه رو آزاد کنند؟
این متدها در زبان ++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();
ولی متد دوم وضعیت جالبی نداره
ممنون میشم راهنمایی کنید