I'm using sqlite3 on embedded system. 
I've got a very very large 
memory usage.

My program must loop to show some values catched from a 
table using SELECT statement.
In a while memory usage grow over 
phisical RAM, so my device lock.
If I run the same code on a PC after 
some minutes the process use a very large amount of memory (512M+).

I 
need to use some function to force memory release or I make some 
mistake ?

Thanks in advance
Pierluigi 

Follow sample code:

#include 
<stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sqlite3.h>

int main (int argc, char *argv[])
{
        
        // Define variables
        sqlite3 
*db;
        int rc,i;
        char *zErrMsg = 0;
        char *zSql;
        char *prevStatus;
        
sqlite3_stmt *stmt;
        
        struct data
        {
                int iPortNumber;
                float 
fRangeMin;
                float fRangeMax;
                float fOffset;
                float fMinL;
                
float fMinLL;
                float fMaxH;
                float fMaxHH;
                int iDelay;
                int 
iHyster;
                int iAlarm;
                char *sTimeAlarm;
        };      
                        struct data riga
[16];
        
        // Open Database
        rc = sqlite3_open("/tmp/test.db", &db);
        if( 
rc )
        {
           fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg
(db));
           sqlite3_close(db);
           exit(-1);
        }
        
        for(rc=0; rc < 
100000000; rc++)
        {
                // Init variables
                i=0;
                        
                zSql = 
sqlite3_mprintf("SELECT PortNumber, RangeMin, RangeMax, Offset, MinL, 
MinLL, MaxH, MaxHH, Delay, Hysteresis, " \
                                               "Alarm, 
TimeAlarm FROM input_ai WHERE Address=%d and Monitor='Y';", 7);
                
                if 
(sqlite3_prepare(db, zSql, -1, &stmt, 0) != SQLITE_OK)
                        return(-1);
        

               
// Save at least 16 rows
                while ((sqlite3_step(stmt)
==SQLITE_ROW) & (i < 16))
                {
                  
              riga[i].iPortNumber = 
sqlite3_column_int(stmt,0);
              riga[i].fRangeMin = 
sqlite3_column_double(stmt,1);
              riga[i].fRangeMax = 
sqlite3_column_double(stmt,2);
              riga[i].fOffset = 
sqlite3_column_double(stmt,3);
              riga[i].fMinL = 
sqlite3_column_double(stmt,4);
              riga[i].fMinLL = 
sqlite3_column_double(stmt,5);
              riga[i].fMaxH = 
sqlite3_column_double(stmt,6);
              riga[i].fMaxHH = 
sqlite3_column_double(stmt,7);
              riga[i].iDelay = 
sqlite3_column_int(stmt,8);
              riga[i].iHyster = sqlite3_column_int
(stmt,9);
              riga[i].iAlarm = sqlite3_column_int(stmt,10);
              
riga[i].sTimeAlarm = (char *) sqlite3_column_text(stmt,11);

              
i++;
                }

                sqlite3_finalize(stmt);

        }
        sqlite3_close(db);
        
}






_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to