ورود

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



oYaMaa
دوشنبه 15 آبان 1391, 12:22 عصر
با سلام
دوستان من یک پروژه دارم که در حال حاضر قابل استفاده برای یک کاربر هست، میخوام برنامم مثلا قایل استفاده برای 5 تا 10 نفر بشه.
خوب برای اینکار هم باید از تمام کنترل هایی که استفاده کردم به تعداد کاربرام اضافه کنم و هم کد نویسی که انجام دادم مرتبا کپی کنم و به تعداد کاربر هام کنم.یعنی به عبارتی چندین فرم که هرکدوم برنامه کاملی هستن.
آیا با این کار سرعت و عملکرد برنامه تغییری خواهد کرد؟
حتی اگر روی سرور قرار بگیره، چون من میخوام کاربرام از طریق کلاینت هایی که در اختیارشون قرار میدم به بخش های مخصوص خودشون متصل بشن.

ممنون میشم راهنماییم کنید!

amin32
دوشنبه 15 آبان 1391, 12:49 عصر
راستش یک مقدار سوالتون گیج کننده هست. شما می خواهید چند کاربر بتونن با نام های کاربری مختلف وارد برنامه بشن و هر کدوم تنظیمات و داده های خودش رو داشته باشه؟ اگر منظورتون این هست که فکر نمیکنم نیاز باشه از کنترلها کپی بگیرید! نمیدونم شاید منظورتون چیز دیگه ای هست.

SlowCode
دوشنبه 15 آبان 1391, 12:51 عصر
سلام

خوب برای اینکار هم باید از تمام کنترل هایی که استفاده کردم به تعداد کاربرام اضافه کنم
چرا؟ این کار اصلا منطقی نیست، شما از اون فرمی که قراره نمایش داده بشه یه نمونه درست کن و به کاربر نشون بده یعنی اینطوری:
Dim frm As New Form1
frm.Show

آیا با این کار سرعت و عملکرد برنامه تغییری خواهد کرد؟
اگه دستی انجام بدی توی حجم برنامت میره بالا چون به جای یه فرم 10 تا فرم داری همراه با چندتا کنترل پس سرعت بارگزاریش هم یکم پایین میاد. ولی اگه با کدنویسی تک تک کنترلهات رو ایجاد کنی حجمش ثابت میمونه ولی در عوض سرعت کم میشه. از روش بالایی استفاده کن، اگه منظورت رو درست متوجه نشدم بگو.

oYaMaa
دوشنبه 15 آبان 1391, 13:08 عصر
منظورم رو کاملا درست متوجه شدید و روشی که گفتید هم عالیه!
ولی من در این مورد اطلاعاتی ندارم اگه کمک کنید تا برنامم رو اینطور طراحی کنم یه دنیا ممنون میشم.
راستی من میخوام علاوه بر این، برنامم نقش سرور رو هم بازی کنه و کلاینت هاش بهش وصل شن و دسترسی به یوزر ها بدن، تو این مورد هم اگر راهنماییم کنید.ممنون میشم.

SlowCode
دوشنبه 15 آبان 1391, 13:45 عصر
خوب حالا کجاش مشکل دارین؟ برنامتون در چه مرحله ایه؟

oYaMaa
دوشنبه 15 آبان 1391, 13:59 عصر
خوب حالا کجاش مشکل دارین؟ برنامتون در چه مرحله ایه؟
برنامم کامل شده برای استفاده همزمان تنها یک یوزر!
میخوام مرجع باشه و روی سرور قرار بگیره تا چند تا یوزر ازش استفاده کنن و اصلاعاتشون با هم تداخل پیدا نکنه.در ضمن من بانک اکسس هم دارم تو برنامم اونو چیکار کنم؟

SlowCode
دوشنبه 15 آبان 1391, 14:16 عصر
برنامه رو روی سیستم هر کاربر نصب کن در اینصورت نیازی به دستور بالایی نداریم. ولی مسیر پایگاه دادت رو باید پایگاه داده روی سرور در نظر بگیری.
در مورد اجرای برنامه از سرور هم اطلاعی ندارم، چون باید عملی کار بشه.:چشمک:

اگه تعداد کاربرانت زیاد باشن باید از sql استفاده کنی چون اکسس تو این مورد ضعیف عمل میکنه و ممکنه خطا بده.

oYaMaa
دوشنبه 15 آبان 1391, 14:34 عصر
برنامه رو روی سیستم هر کاربر نصب کن در اینصورت نیازی به دستور بالایی نداریم. ولی مسیر پایگاه دادت رو باید پایگاه داده روی سرور در نظر بگیری.
در مورد اجرای برنامه از سرور هم اطلاعی ندارم، چون باید عملی کار بشه.:چشمک:

اگه تعداد کاربرانت زیاد باشن باید از sql استفاده کنی چون اکسس تو این مورد ضعیف عمل میکنه و ممکنه خطا بده.
نه نمیخوام این کارو کنم.همین دستور بالایی خیلی خوبه!
فقط اینکه مثلا روی فرمم یه دکمه هست که اسمش cmd وقتی از طریق دستور بالا یکی دیگه از این فرم رو لود میکنم.این دکمه اسمش چی میشه؟تغییر میکنه با نه؟
اگه آره به چه شکل و اگه نه، پس چطور به کاربرم اطلاعتش رو نمایش بدم؟

SlowCode
دوشنبه 15 آبان 1391, 14:39 عصر
نه اسمش تغییر نمیکنه. برای دسترسی بهش باید اینطوری بنویسی، مثلا:

frm.command1.caption= "Close"

oYaMaa
دوشنبه 15 آبان 1391, 14:45 عصر
نه اسمش تغییر نمیکنه. برای دسترسی بهش باید اینطوری بنویسی، مثلا:

frm.command1.caption= "Close"


خوب بر فرض من 5تا اینطوری فرم باز کردم، با این دستور به کدومشون دسترسی پیدا میکنم؟!!!

oYaMaa
دوشنبه 15 آبان 1391, 15:49 عصر
دوستان یه نمونه ساده ضمیمه کردم.
اگر مشکلشو حل کنید یه مقدار از سوالاتم بر طرف میشه.
94543

amin32
دوشنبه 15 آبان 1391, 16:37 عصر
دوستان یه نمونه ساده ضمیمه کردم.
اگر مشکلشو حل کنید یه مقدار از سوالاتم بر طرف میشه.
94543

مشکلش به خاطر این هست که در تعریف متغیر PageUser طول آرایه مشخص نشده.فقط کافیه اون رو به این شکل تعریف کنید:


Dim PageUser(2) As New Form2

oYaMaa
چهارشنبه 17 آبان 1391, 13:08 عصر
دوستان من اینکارو کردم و جواب داد.ولی در مورد کنترل هایی مثل وینساک که در برنامم دارم، با ارور مواجه شدم!
آیا باید اون ها رو هم آرایه ای کنم؟
اگر آره لطفا راهنمایی کنید.ممنون!

oYaMaa
شنبه 20 آبان 1391, 13:18 عصر
کسی نیست جواب بده؟!!!

SlowCode
شنبه 20 آبان 1391, 13:39 عصر
سلام
پستهای جناب M.T.P رو دنبال کنید.
http://barnamenevis.org/showthread.php?365050-%D8%AA%DA%A9%D9%85%DB%8C%D9%84-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-NetChat&p=1614413&viewfull=1#post1614413

oYaMaa
شنبه 20 آبان 1391, 23:45 عصر
بزارید با نمونه سوالاتم رو مطرح کنم.توی این نمونه 2 که قرار دادم.من از یک ماژول استفاده کردم.که تابعی درش هست که با استفاده از وینساکی که روی فرم 2 قرار داره کار میکنه.
حالا اگر شما روی همه دکمه های show user form کلیک کنید و بعد روی همه دکمه go ، خواهید دید که با خطا مواجه میشید.فراخوانی وینساک روی فرم 2 باید طوره دیگه ای انجام بشه.
به چه شکل؟
ممنون
94747

amin32
یک شنبه 21 آبان 1391, 09:24 صبح
مشکلتون به این دلیل هست که بدون بستن اتصال قبلی دارید به یک آدرس دیگه وصل میشید. اول باید اتصال رو close کنید بعد Connect بشید. به زبان ساده فقط کافیه در تابع , قبل از دستور Connect کد زیر رو اضافه کنید:


Form2.Winsock1.Close

oYaMaa
یک شنبه 21 آبان 1391, 19:39 عصر
مشکلتون به این دلیل هست که بدون بستن اتصال قبلی دارید به یک آدرس دیگه وصل میشید. اول باید اتصال رو close کنید بعد Connect بشید. به زبان ساده فقط کافیه در تابع , قبل از دستور Connect کد زیر رو اضافه کنید:


Form2.Winsock1.Close

نه دوست عزیز!
اصلا بحث این نیست، وینساک که مثال بود.
منظوره من اینه که من از کجا بفهمم کدوم صفحه فلان دستور رو به ماژولم فرستاده؟
مثلا pageuser(0) یا pageuser(1)یا ...؟
تا من به جای form2 اونو قرار بدم.

amin32
دوشنبه 22 آبان 1391, 13:26 عصر
بزارید با نمونه سوالاتم رو مطرح کنم.توی این نمونه 2 که قرار دادم.من از یک ماژول استفاده کردم.که تابعی درش هست که با استفاده از وینساکی که روی فرم 2 قرار داره کار میکنه.
حالا اگر شما روی همه دکمه های show user form کلیک کنید و بعد روی همه دکمه go ، خواهید دید که با خطا مواجه میشید.فراخوانی وینساک روی فرم 2 باید طوره دیگه ای انجام بشه.
به چه شکل؟
ممنون
94747

انصافآ منظورتون رو بد بیان کردید.
به هر حال اگه از این سوال:

نه دوست عزیز!
اصلا بحث این نیست، وینساک که مثال بود.
منظوره من اینه که من از کجا بفهمم کدوم صفحه فلان دستور رو به ماژولم فرستاده؟
مثلا pageuser(0) یا pageuser(1)یا ...؟
تا من به جای form2 اونو قرار بدم.

منظورتون اینه که مثلا هر pageuser با وینساک خودش به شکل مستقل و البته با استفاده از دستور Connect داخل ماژول وصل بشه, باید تابع Connect رو به این شکل تغییر بدید:


Public Function Connect(Text As String,ByRef ws As Winsock) As String
ws.Connect Text
End Function


و برای فراخوانی به این شکل عمل کنید:


Call Connect(Label1.Caption, Winsock1)


نمیدونم شاید باز هم منظورتون رو بد متوجه شدم! در کل نمیدونم هدفتون از این برنامه چیه. خودم به شخصه یادم نمیاد برنامه تحت شبکه یا تروجانی رو به این شکل دیده باشم یا نوشته باشم!

oYaMaa
دوشنبه 22 آبان 1391, 14:25 عصر
عالییییییییییی بود!
ممنون! درست همون چیزی که می خواستم.
این جوابتون اینقدر برای من مهم بود که برای تشکر تایپیک ارسال کردم.معذرت میخوام!:لبخندساده:

برای اینکه از همین روش بجای کنترلی که توی فرم هست sub هایی رو که تعریف کردم فراخوانی کنم، چطور باید عمل کنم؟

oYaMaa
دوشنبه 22 آبان 1391, 14:57 عصر
ببخشید علاوه بر سوال بالا یه سوال دیگه هم داشتم:
طبق همون نمونه کوچیک که گذاشتم.چطور وقتی روی دکمه show user form کلیک میکنم، همون لحظه که فرم نمایش داده میشه، عملی که دکمه go انجام میده هم، همزمان با نمایش فرم انجام بشه.نمیخوام کد به شکل زیر باشه:

Private Sub Command1_Click()
PageUser(0).Show
PageUser(0).Label1.Caption = Text1.Text
End Sub

چون مشخص نیست که شماره کدوم آرایه برای فلان یوزره!
میخوام از راه دیگه ای باشه.ممنون!

amin32
دوشنبه 22 آبان 1391, 19:51 عصر
اولا به شما پیشنهاد میکنم که در تابع Connect برای آرگومان وینساک (ws) از Byref استفاده کنید. خودم اون کد صفحه قبل رو اصلاح کردم.



برای اینکه از همین روش بجای کنترلی که توی فرم هست sub هایی رو که تعریف کردم فراخوانی کنم، چطور باید عمل کنم؟

اگه اشتباه نکرده باشم شما میخواهید که روالی رو که در هر PageUser تعریف شده رو در ماژولتون فراخوانی کنید. اگه منظورتون این هست , شما باید اون sub رو به شکل public تعریف کنید و در تابعی که در ماژول دارید هم باید فرم مورد نظر رو به عنوان آرگومان دریافت کنید. با مثال توضیح میدم.
فرض کنید میخواید در ماژول , sub مربوط به رویداد کلیک لیبل( البته میتونه روالهای تعریف شده توسط کاربر باشه) رو فراخوانی کنید. برای این کار باید روال رو در form2 به این شکل تعریف کنید:


Public Sub Label1_Click()
MsgBox ("test")
End Sub


و در ماژول باید تابع رو به این شکل تعریف کنید :


Public Function test(ByRef Form As Form2) As String
Form.Label1_Click
End Function


و در نهایت برای فراخوانی تابع در هر PageUser به این شکل عمل کنید:


Call test(Me)


البته اگه باز اشتباه متوجه نشده باشم.

oYaMaa
دوشنبه 22 آبان 1391, 19:58 عصر
ممنون منظورم همین بود.هنوز وقت نکردم تست کنم.ولی وقتی توی کد زیر من اسمی از form2 میارم، آیا باز هم Pageuser ها به طور مستقل عمل می کنند؟

Public Function test(ByRef Form As Form2) As String
Form.Label1_Click
End Function

amin32
دوشنبه 22 آبان 1391, 20:04 عصر
ممنون منظورم همین بود.هنوز وقت نکردم تست کنم.ولی وقتی توی کد زیر من اسمی از form2 میارم، آیا باز هم Pageuser ها به طور مستقل عمل می کنند؟

Public Function test(ByRef Form As Form2) As String
Form.Label1_Click
End Function




بله Pageuser ها با Form2 فرق میکنند و فقط هنگام تعریف هر Pageuser تمام خصوصیات form2 رو کپی میکنه. و بعدش دیگه کاری با هم ندارن و هر کدوم راه خودشو میره!

oYaMaa
دوشنبه 22 آبان 1391, 20:11 عصر
حالا با همه این اوصاف، اگر من تعداد زیادی از این page user ها باز کنم، آیا روی سرعت و مخصوصا عملکرد برنامم تاثیری دارن؟
نا گفته نماند که برنامم (همون form2) برنامه بزرگ و نسبتا پیچیده ای هست.

amin32
دوشنبه 22 آبان 1391, 20:15 عصر
حالا با همه این اوصاف، اگر من تعداد زیادی از این page user ها باز کنم، آیا روی سرعت و مخصوصا عملکرد برنامم تاثیری دارن؟
نا گفته نماند که برنامم (همون form2) برنامه بزرگ و نسبتا پیچیده ای هست.

خب تاثیر که داره , اما این که چقدر محسوس هست فقط با تست برنامه اصلی مشخص میشه.