MySQL、LinuxのCプログラムを操作して、意外にもWindowsのCプログラムより効率が低いです
Cプログラムを作成してデータベースコードを操作して、Linuxの下のデータは意外にもWindowsの10倍ぐらい遅いことを発見しました.
環境:
同じマシン構成
同じデータベースへの接続
同じコード
異なるオペレーティングシステム、1つはXP、1つはubuntu 10.0.4
異なるコンパイル環境、一つはVS 2008、一つはgcc 4
どのようにコンパイルしたプログラムの実行効率がそんなに悪いのか、Linuxの速度が速いと言われているのではないでしょうか.100%私が料理しすぎたような気がします.
皆さんは出会ったことがあるかどうか分かりません.
次のコード(VS 2008で直接コンパイルでき、ubuntuでは最初の行を削除します.)
環境:
同じマシン構成
同じデータベースへの接続
同じコード
異なるオペレーティングシステム、1つはXP、1つはubuntu 10.0.4
異なるコンパイル環境、一つはVS 2008、一つはgcc 4
どのようにコンパイルしたプログラムの実行効率がそんなに悪いのか、Linuxの速度が速いと言われているのではないでしょうか.100%私が料理しすぎたような気がします.
皆さんは出会ったことがあるかどうか分かりません.
次のコード(VS 2008で直接コンパイルでき、ubuntuでは最初の行を削除します.)
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <mysql.h>
#include <time.h>
main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD * fd ;
char *server = "localhost";
char *user = "root";
char *password = ""; /* */
char *database = "ytga";
char sql[500]="";
char aszFlds[ 25 ][ 25 ];
int i,j,k;
int t=0;
double star,finish;
star=(double)clock();//
conn = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s
", mysql_error(conn));
exit(1);
}
/* send SQL query */
if (mysql_query(conn, "show tables")) {
fprintf(stderr, "%s
", mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);
/* output table name */
printf("MySQL Tables in mysql database:
");
while ((row = mysql_fetch_row(res)) != NULL)
printf("%s
", row[0]);
/* close connection */
mysql_free_result(res);
// SQL
sprintf(sql, "create table mytesttable (id int PRIMARY KEY AUTO_INCREMENT ,time datetime, s1 char(6), s2 char(11), s3 int, s4 int)");
printf( "creating mytesttable
") ;
if (mysql_query( conn, sql)){
fprintf(stderr, "%s
", mysql_error(conn));
printf( "Can't create mytesttable
") ;
}
if (mysql_query( conn, "delete from mytesttable where id>0"))
{// SQL
fprintf(stderr, "%s
", mysql_error(conn));
printf( "delete from mytesttable where id>0
") ;
}
//
printf( "insert mytesttable
") ;
for(i=0;i<100000;i++){
sprintf(sql,"insert into mytesttable(time,s1,s2,s3,s4) values('2000-3-10 21:01:30','Test','MySQLTest',2000,%d)",i);
if (mysql_query( conn, sql))
{// SQL
fprintf(stderr, "%s
", mysql_error(conn));
ErrLog( "Can't insert data to table") ;
mysql_close( conn ) ;
exit(1);
}
}
//*/
//
printf( "update mytesttable, update 1000rows
") ;
for(i=0;i<1000;i++){
sprintf(sql,"update mytesttable set time='2010-11-11 11:11:11' where s4=%d",i);
if (mysql_query( conn, sql))
{// SQL
fprintf(stderr, "%s
", mysql_error(conn));
ErrLog( "Can't update mytesttable ") ;
mysql_close( conn ) ;
exit(1);
}
}
//*/
//
strcpy(sql,"select * from mytesttable ");
printf( " Query: %s
", sql) ;
if (mysql_query( conn, sql))
//
{
// SQL
fprintf(stderr, "%s
", mysql_error(conn));
mysql_close( conn ) ;
exit(1);
}
else
{
res = mysql_store_result( conn ) ;
//
i = (int) mysql_num_rows( res ) ;
//
printf( "Query: %s =%ld
", sql, i ) ;
for ( i = 0 ; fd = mysql_fetch_field( res ) ;i++ )
strcpy( aszFlds[ i ], fd->name ) ;
//
for (i=1; row = mysql_fetch_row( res ); )
//
{j = mysql_num_fields( res ) ;
//
//printf( "Record #%ld:-
", i++ ) ;
for ( k = 0 ; k < j ; k++ ){
//
//printf( " Fld #%d (%s): %s
", k + 1, aszFlds[ k ],(((row[k]==NULL) || (!strlen(row[k])))?"NULL":row[k])) ;
}
//printf( "Query: %s !
", sql, i ) ;
}
mysql_free_result( res ) ;
}
mysql_close(conn);
finish=(double)clock();
printf(" , :%.2f ",(finish-star));
getchar();
}