PDA

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



ali_autumnal
شنبه 24 بهمن 1388, 22:53 عصر
با سلام و خسته نباشید.
یه کدی من نوشتم که از کاربر مقداری بزرگتر مساوی 2 و کوچکتر مساوی 5 میگیره.

این کد عدد مربوطه رو به توان 4 میرسونه و به تعداد عدد بدست آمده شئ (مثلا تکست باکس) ایجاد میکنه. بصورت ماتریسی

حالا مشکل اینجاست که وقتی مقدار ورودی کوچکتر از 4 هست سرعت برنامه قابل تحمله. اما وقتی عدد 5 رو وارد میکنم که باید 625 تا تکست باکس ایجاد کنه سرعت افتضاحه!!!!!!!

اگه امکانش هست روشی برای بهبود سرعت ارائه بدید.

تکه کدی که من نوشتم:

متغیر عمومی:



//Global Variable
List<TextBox> text = new List<TextBox>();


تابع ایجاد شئ در مکان مورد نظر:



private void TextBox(int X, int Y)
{
TextBox txt = new TextBox();
txt.Size = new Size(20, 20);
txt.Location = new Point(X, Y);
txt.Text = "0";
txt.TextAlign = HorizontalAlignment.Center;
txt.MaxLength = 2;
text.Add(txt);
this.Controls.AddRange(text.ToArray());
txt.Location = new Point(X, Y);
Refresh();
}


تابع ای که n را به توان 4 میرساند و به اون تعداد تابع قبلی را فراخوانی می کند.



int max = n * n;
r = max;
int i = -1;
int X = 0, Y = -10;
while (++i<max)
{
Y += 20;
X = -10;
int j=-1;
while (++j < max)
TextBox(X += 20, Y);
}


متشکرم علی پاییزی

SMRAH1
یک شنبه 25 بهمن 1388, 09:58 صبح
سلام
چرا این همه!
برای چی می خوای؟ دلیل رو بگو ساید راه حل بهتری هم باشه!
موفق باشی

AliRezaPro
یک شنبه 25 بهمن 1388, 10:06 صبح
حالا مشکل اینجاست که وقتی مقدار ورودی کوچکتر از 4 هست سرعت برنامه قابل تحمله. اما وقتی عدد 5 رو وارد میکنم که باید 625 تا تکست باکس ایجاد کنه سرعت افتضاحه!!!!!!!
خوب این یه چیز کاملا طبیعی است دوست عزیز (625 تکست باکس دور ز تصور بنده است حتی !)

ali_autumnal
یک شنبه 25 بهمن 1388, 10:41 صبح
بابا تورو خدا راه حل بدید. تصورات رو بیخیال . این یه بازی هستش که بصورت یه پروژه در اومده.

بازی Sudoku
همه چیزش رو نوشتم فقط لعنتی سرعت تو تولید 625 تا کمه و بعد که بخوام نمره اضافی بگیرم باید 1296 تا تولید کنم!!!!!!!!!!!!!!!!!!!!!!!!!!!!
آی خداااااااااااااااااااا....

ASKaffash
یک شنبه 25 بهمن 1388, 11:36 صبح
سلام
هر شی که ایجاد میشود متناسب با نوع و سایز فضا اشغال میکند بنابراین پیشنهاد میکنم از DataGridView به جای آن تعداد TextBox استفاده کنید (چون یکجوری یک ماتریس است)

slashslash2009
یک شنبه 25 بهمن 1388, 12:00 عصر
خوب یک چیز طبیعی هست که سرعت کم بشه با این همه تکست باکس چه جوری میخوای تو فرمت جاشون بدی .ولی سرعت cpu و ram هم بی تاثیر نیست

Behrooz_CS
یک شنبه 25 بهمن 1388, 12:13 عصر
من کدت را اصلاح کردم . چند تا دستور مهم را گزاشته بودی توی حلقه که کار اشتباهی بود !
اینو من تست کردم جواب می ده ! در یک چشم به هم زدن کنترل ها ساخته می شن :لبخند:


TextBox[] gbTextBox = null;

private void Form1_Load(object sender, EventArgs e)
{
int max = 625;
gbTextBox = new TextBox[max];
int rows = 25;
int i = 0;
int X = 0, Y = -10;
int Index = 0;
while (i++ < rows)
{
Y += 30;
X = 0;
int j=0;
while (j++ < rows)
TextBox(Index++, X += 40, Y);
}
this.Controls.AddRange(gbTextBox);
Refresh();
}

private void TextBox(int index, int X, int Y)
{
gbTextBox[index] = new TextBox();
gbTextBox[index].Size = new Size(35, 20);
gbTextBox[index].Location = new Point(X, Y);
gbTextBox[index].Text = index.ToString();
gbTextBox[index].TextAlign = HorizontalAlignment.Center;
gbTextBox[index].MaxLength = 2;
}

ali_autumnal
یک شنبه 25 بهمن 1388, 15:15 عصر
سلام
هر شی که ایجاد میشود متناسب با نوع و سایز فضا اشغال میکند بنابراین پیشنهاد میکنم از DataGridView به جای آن تعداد TextBox استفاده کنید (چون یکجوری یک ماتریس است)


دوست عزیز من میخوام کاربر بتونه مقادیر تکست باکس ها هرلحظه که دوست داره تغییر بده!!!
و طبق این تغییرات برنامه باید بتونه تشخیص بده که:
آیا راه حلی برای این معما میشه پیدا کرد؟ درصورت مثبت بودن نتیجه معما در تکست باکس ها دوباره نوشته بشه.

ali_autumnal
یک شنبه 25 بهمن 1388, 15:29 عصر
من کدت را اصلاح کردم . چند تا دستور مهم را گزاشته بودی توی حلقه که کار اشتباهی بود !
اینو من تست کردم جواب می ده ! در یک چشم به هم زدن کنترل ها ساخته می شن :لبخند:


TextBox[] gbTextBox = null;

private void Form1_Load(object sender, EventArgs e)
{
int max = 625;
gbTextBox = new TextBox[max];
int rows = 25;
int i = 0;
int X = 0, Y = -10;
int Index = 0;
while (i++ < rows)
{
Y += 30;
X = 0;
int j=0;
while (j++ < rows)
TextBox(Index++, X += 40, Y);
}
this.Controls.AddRange(gbTextBox);
Refresh();
}

private void TextBox(int index, int X, int Y)
{
gbTextBox[index] = new TextBox();
gbTextBox[index].Size = new Size(35, 20);
gbTextBox[index].Location = new Point(X, Y);
gbTextBox[index].Text = index.ToString();
gbTextBox[index].TextAlign = HorizontalAlignment.Center;
gbTextBox[index].MaxLength = 2;
}


اوکی!
متشکر. سرعت کدتون خیلی بالاست.

اما مشکل اینجاست که برنامه نباید در زمان لود شدن از تعداد تکست باکس ها اطلاعی داشته باشه!!؟
کد شما هنگام لود شدن برنامه بصورت استاتیک 625 تا تکست باکس تولید میکنه.
من میخوام برنامه دینامیک باشه و هیچ اطلاعی از تعداد تکست باکس ها نداشته باشه. زمانی که کاربر عدد 5 را وارد کرد اون لحظه باید برنامه بدونه که باید 625 تا تکست باکس تولید کنه. ویا عدد 6 که 1296 تا....

Behrooz_CS
یک شنبه 25 بهمن 1388, 15:32 عصر
اوکی!
متشکر. سرعت کدتون خیلی بالاست.

اما مشکل اینجاست که برنامه نباید در زمان لود شدن از تعداد تکست باکس ها اطلاعی داشته باشه!!؟
کد شما هنگام لود شدن برنامه بصورت استاتیک 625 تا تکست باکس تولید میکنه.
من میخوام برنامه دینامیک باشه و هیچ اطلاعی از تعداد تکست باکس ها نداشته باشه. زمانی که کاربر عدد 5 را وارد کرد اون لحظه باید برنامه بدونه که باید 625 تا تکست باکس تولید کنه. ویا عدد 6 که 1296 تا....

من اون عدد را برای مثال گذاشتم
شما می تونی زمان اجرا بهش مقدار بدی

ali_autumnal
یک شنبه 25 بهمن 1388, 15:56 عصر
من اون عدد را برای مثال گذاشتم
شما می تونی زمان اجرا بهش مقدار بدی

آره راست میگید من به این توجه نکردم.

ای ول عالی بود.
به این میگن کد نویس

متشکرم.