PDA

View Full Version : مشکل در سرعت اجرای برنامه در دو سیستم



dj_dj_dj
شنبه 13 تیر 1394, 21:48 عصر
سلام دوستان
من یه برنامه نوشتم خیلی ساده با دستورات شرطی
while (1) {
if (شرط1){
cout<<"1";
}

esle

if (شرط2){
cout<<"2";
}

esle
,
.
.
.
}
این مثلا تا 50 پیش رفته
وقتی برنامه رو اجرا میکنم توو سیستم خودم اگه مثلا if های اولی درست باشه فورا مثلا خروجی رو میده دوباره while تکرارا میشه ولی وقتی شرط های بالا درست نباشه مثلا 30 تا دستور if چک میکنه سرعت خیلی کاهش پیدا میکنه مثلا 4 ثانیه میکشه . ولی این مشکل نیست مشکل اینه که روو همون سیستم یه VM زدم همون سیستم عامل برنامه رو اونجا اجرا میکنم در کسر میلی ثانیه کل حلقه while رو پیمایش میکنه و فورا خروجی رو میده بهم چه دستور if اولی باشه چه آخری توو میلی ثانیه خروجی رو میده ولی توو سیستم خودم هرچی دستورات if بیشتری رو پیمایش میکنه سرعت برنامه واسه خروجی میاد پایین نمیدونم کامل تونستم بفهمونم یا نه

سیستم اصلی :
if (شرط 1)


مدت زمان خروجی دادن برنامه 1 میلی ثانیه
.
.
.
if (شرط 30)

مدت زمان خروجی دادن برنامه 3 ثانیه




ماشین مجازی

if (شرط 1)


مدت زمان خروجی دادن برنامه 1 میلی ثانیه
.
.
.
if (شرط 30)

مدت زمان خروجی دادن برنامه 1 میلی ثانیه



با تشکر

amirtork
شنبه 13 تیر 1394, 23:52 عصر
سلام.
برای افزایش سرعت اجرای برنامه در برنامه هایی که if های متوالی دارن. بهتر هست از ساختار switch case و یا حداقل از else if استفاده کنید.
در مورد اجرای سریع تر برنامه در VM، اگر VM هم زمان با اجرای برنامه در سیستم اصلی در حال اجرا هست، شاید دلیل افت سرعت اختصاص منابع به VM باشه، و منابع کمتری در اختیار برنامه ی شما باشه. البته این فقط یک ایده ایی بود که به ذهنم رسید. شاید دلیل چیز دیگه ای باشه.

dj_dj_dj
یک شنبه 14 تیر 1394, 13:03 عصر
سی تا دستور if متوالی واسه پردازنده های امروزی فکر نکنم تاثیری روو سرعت داشته باشه حلقه توو در توو نیست بگم تاثیر میزاره
خیر موقع تست روو سیستم اصلی ماشین مجازی فعال نیست

rahnema1
یک شنبه 14 تیر 1394, 14:05 عصر
سلام
این برنامه ساده را نذاشتید
ولی اگه از چند thread استفاده کرده باشید دقت کنید برنامه درست نوشته شده باشه

dj_dj_dj
یک شنبه 14 تیر 1394, 14:26 عصر
در حد ترد نوشتن نیست . برنامه ساده ای هست .درست نوشته شده درست هم کار میکنه فقط من موندم چرا توو سیستم اصلیم با سرعت کم ترین کار میکنه توو وی ام با سرعت بیشتر یه بار هم شد توو سیستم خودم 2 روز همینجوری با سرعت کار کرد ولی بعد دو روز باز خوابید !

reza_noei
دوشنبه 15 تیر 1394, 00:20 صبح
سلام
در مورد شرظ هایی که استفاده کرده اید هم توضیح بدبد. ممکنه اشکال از اونجا باشه.

dj_dj_dj
دوشنبه 15 تیر 1394, 10:06 صبح
این یه تیکه از کد ام
void _collect()
{

int a[500];
int i=0;

COLORREF color;
COLORREF color1;
COLORREF color2;
COLORREF color3;
COLORREF color4;
COLORREF color5;
COLORREF color6;

HDC dc;

int temp ;

dc = GetDC(NULL);
ReleaseDC(NULL, dc);

while (1){

///////////////////////////1
dc = GetDC(NULL);
color1 = GetPixel(dc, 706,336);//
color2 = GetPixel(dc, 706,337);//
color3 = GetPixel(dc, 706,338); //
color4 = GetPixel(dc, 704,336); //


if (color1==16777215&&color2==16777215&&color3==16777215&&color4!=16777215) {

cout<<"1"<<endl; temp=1;
ofstream __0("number.txt",ios::app);

__0<<1<<endl<<endl;

__0.close();
}


//////////////////////////2

dc = GetDC(NULL);
color1 = GetPixel(dc, 720,341);
color2 = GetPixel(dc, 721,341);
color3 = GetPixel(dc, 722,341);
color4 = GetPixel(dc, 720,336);

if (color1==16777215&&color2==16777215&&color3==16777215&&color4!=16777215)
{
cout<<" "<<"2"<<endl; temp =2;
ofstream __0("number.txt",ios::app);

__0<<" "<<2<<endl<<endl;

__0.close();
}


} // ende while
}

ساختارم که مشکل داره می دونم ولی خب کار میکنه
از نظر خودم اون پیکسل هایی که قبل از هر if دریافت میکنه سرعت رو کاهش میده ولی بحث اینه که چرا روو وی ام ویر سرعت عمل برنامه بالاست ولی توو سیستم اصلی من نه !!!

rahnema1
دوشنبه 15 تیر 1394, 19:24 عصر
برنامه را به این صورت اصلاح کنید ببینید درست می شه

int temp ;
HDC dc = GetDC(NULL);
if (!dc)
{
cerr << "error!";
return;
}
ofstream __0("number.txt",ios::app);
while (1){


color1 = GetPixel(dc, 706,336);//
color2 = GetPixel(dc, 706,337);//
color3 = GetPixel(dc, 706,338); //
color4 = GetPixel(dc, 704,336); //
///////////////////////////1
if (color1==16777215 && color2==16777215 && color3==16777215 && color4!=16777215){
cout<<"1"<<endl; temp=1;
__0<<1<<endl<<endl;
continue;
}
///////////////////////////2
if (color1==16777215 && color2==16777215 && color3==16777215 && color4!=16777215){
cout<<"2"<<endl; temp=2;
__0<< 2 <<endl<<endl;
continue;
}
}
__0.close();


ReleaseDC(NULL, dc);

golbafan
دوشنبه 15 تیر 1394, 20:47 عصر
ماشین مجازی سیستمش 32 هست یا 64 بیتی ؟
سیستم عامل اصلی چی؟ 64 هست؟

میتونید با TickCount اون خطوطی رو که باعث کندی شده مشخص کنید