PDA

View Full Version : سوال: سرعت افتضاح .net Frmework , #C



Leon_pro
پنج شنبه 10 مرداد 1387, 17:42 عصر
من قبلا یه پروژه حسابداری با C# و VS 2005 نوشتم جدیدا هم دارم یه پروژه دیگه با C# 3.5 و VS 2008 مینویسم.
نمیدونم چرا این قدر برنامه های که با C# مینویسم اینقدر کندن از تمامی استاندارد ها هم استفاده میکنم . در ابتدا که برنامه اجرا میشه همه چی خوبه تا اینکه چند دقیقه از اجرا میگذره برنامه به حدی کند میشه که به طور مثال برای باز شدن یه فرم 10 ثانیه طول میکشه انگار که همه چی slow motion .:عصبانی++::عصبانی++::عصبانی++:

کارفرما هم بد جوری کلافم کرده حق هم داره برنامه قبلیم رو هم بعضی وقتا ازش شکایت میککن و می گن کنده ولی این 3.5 net. دیگه خیلی فاجعه است بنده خدا سیستمش هم علی نموتنم از اون ایراد بگیرم Cpu 3 full , 2gb ram داره.

چه کار کنم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟:عصبانی++:

در ضمن یه چیز هایی هم راجع به ngen.exe شنیدم به نظرتون به درد می خوره؟؟؟

خلاصه کمکم کنید.:گریه::گریه:

Mahdi.Kiani
پنج شنبه 10 مرداد 1387, 18:26 عصر
میشه نمونه برنامتون یا کدتون را بفرستید؟

Editali
پنج شنبه 10 مرداد 1387, 18:50 عصر
توی استفاده از منابع سیستم مشکل داری. مثلا یه کل دیتابیس رو میریزی تو دیتاست. یا فرمهاتو قبل از اجرا میسازی یا منابع دیگرو آزاد نمیکنی. البته بیشترین مشکل کاربرا در مورد دیتاسته. مثلا خالیش نمیکنن.

اَرژنگ
پنج شنبه 10 مرداد 1387, 19:07 عصر
من با Editali (http://barnamenevis.org/forum/member.php?u=41463) گفتند موافقم، دلایل کند بودن برنامه‌ها ۹۸ درصد همان است.
استفاده از روشهایه درست کلی تاثیر دارد، تنها زمانی که کسی از سرعت دات‌نت با حق بتواند شکایت کند وقتی است که مقدار زیادی محاسبات انجام میده، بقیه زمانها اشکال از روش استفاده کردن از داتابیس و اشغال کردن زیاد حافظه است.
همانطوری که جناب کیانی فرمودند یا مثال طرز کاری که استفاده میکنید را بفرتستید یا اینکه کل سور کل و یا قسمتی از برنامه را.

Leon_pro
پنج شنبه 10 مرداد 1387, 20:29 عصر
ببنید برنامه ای که نوشتم در وضعیت تست حتی 10 تا رکورد هم تو هر جدول نیست که این جوری شده. نمی دونم اگه 5000 رکورد بشه که احتمالا کامپیوتر ریست میشه.:گیج:


نمونه کدم رو گذاشتم براتون .
تو فولدر db یه backup از دیتابیس هم هست ،از SQL 2005 استفاده کزدم و اسم Database پروژه "Distribution_adb" است. ایجادش کنید و backup رو Restore کنید.

مرسی که کمک می کنید.

Leon_pro
جمعه 11 مرداد 1387, 17:03 عصر
من نمونه برنامه هم گذاشتم کافی اجرا کنید و چند تا رکورد تو دو سه فرم ایجاد یا ویرایش کنید و بعد از چند دقیقه چیزی رو که من می گم به راحتی حس میکنید.
در ضمن من با VS 2008 team suite کد نوشتم . ممکن این مشکل از اون باشه؟؟؟؟؟؟؟

در مورد ngen.exe کسی چیزی می دونه یا مثالی براش داره چون من با هاش نتونستم کار کنم؟؟؟؟

درضمن مگه garbage collector منابع رو آزاد نمیکنه اگه آزاد بکنه که دیگه نیاز نیست من خودم دستی منابع رو آزاد کنم.؟؟/؟؟؟؟؟؟

اَرژنگ
جمعه 11 مرداد 1387, 17:53 عصر
با سلام
۱. کدی که فرستادید کامل نیست، از اسمبلیهایی استفاده میکنید که سورسش را نمیتوانم چک کنم، فارسی لایبراری حتما باید استفاده بشه؟ اگر ممکن است فقط سورس کامل ایجاد کردن چند تا رکورد تو دو سه فرم ایجاد یا ویرایش بشد را بفرستید. کل پروژه زیاد است.

ولی اضافه کردن چند تا رکورد ربطی به فریم ورک ندارد، یا اسمبلییاهی که استفاده میکنید درست نیستند یا اینکه روش کد نویسی درست نیست.

اگر میتوانید یک پروژه کوچکتر که فقط چند تا رکورد ایجاد میکنه بفرستید، من خودم قبلا در همین انجمن یک مثال برنامه نویسی ۳ لایه فرستاده بودم که با هیچ کدام از مشکلاتی که گفتید برنمیخورد.

لطفا از فرستادن چیزهایی که کد کامل ندارند در آینده خودداری کنید (به بقیه هم توصیه میکنم که همینطوری یک برنامه‌ای را که سورس کامل ندارد و نمیتوانند بیلد کنند را اجرا نکنند.)

Leon_pro
جمعه 11 مرداد 1387, 18:20 عصر
اولا شما که دانلود کردید میتونی کد من رو نگاه کنی اگه ایرادی از نظر ساختاری داره بگی حالا اجرا نشد مهم نیست.
دوما توی یه تکه کد کوچکتر که مشکل من نمایان نمیشه و نمیتونی لمسش کنی.

درضمن پروژه ای که فرستادم ایرادی نداره اگه Farsi Library رو نمشناسه تو فلدر bin>debug ، فایلهای DLL اش موجوده میتونی به refrence ها اضافه کنی ولی من خودم تست کردم و به مشکلی هم بر نخوردم در این ضمینه.

ولی ، چشم من کد کوچیکتری آپلود می کنم.

Leon_pro
جمعه 11 مرداد 1387, 18:49 عصر
این همه نمونه کد کوچیک با 3 تا فرم.

DarkSoroush
جمعه 11 مرداد 1387, 20:18 عصر
من برنامتون رو چک نکردم ولی گفتم در مورد بعضی از این سوالاتتون تا جایی که اطلاع دارم جواب بدم بد نیست

در ضمن من با VS 2008 team suite کد نوشتم . ممکن این مشکل از اون باشه؟؟؟؟؟؟؟
ربطی نداره

در مورد ngen.exe کسی چیزی می دونه یا مثالی براش داره چون من با هاش نتونستم کار کنم؟؟؟؟
این برنامه تا جایی که من اطلاع دارم برنامه را به زبان ماشین تبدیل میکنه و برنامه را بی نیاز ار دات نت میکنه. باید فقط با پارامتر ادرس پروژتون اجرا کنید. برنامه خروجی دیگه il نیست.


درضمن مگه garbage collector منابع رو آزاد نمیکنه اگه آزاد بکنه که دیگه نیاز نیست من خودم دستی منابع رو آزاد کنم.؟؟/؟؟؟؟؟؟
گاربچ منابع بدون پورنتر رو ازاد میکنه. در ضمن حتی اگر شما هم منابع رو ازاد کنید برنامه منتظر عمل کاربج میمونه. به زبان ساده ازاد کردن منابع از طرف شما فقط یک مهر تایید هست و بازم شما منابع رو ازاد نمیکنید. ولی گاهی این مهر لازمه!!

Leon_pro
جمعه 11 مرداد 1387, 21:17 عصر
حالا در هر صورت می گید من چه کنم؟

لطفا دوستان دیگه هم همکاری کنند.

اَرژنگ
شنبه 12 مرداد 1387, 03:50 صبح
۱- هنوز نمیشه بیلد کرد
۲-فرمها در دزیگنر باز نمیشند
۳-کد چی را چک کنیم؟ فقط قسمت کوچکی را که بشه بیلد کرد بفرستید یا یانکه بگید که کدام فرمه که بقیه را حذف کنیم و فقط‌ به همان یک فرم توجه کنیم

اینکه میگید از این کمتر بفرستید مشکل را نمیشه دید نشانگر این است که مشکل از همان قسمتی است که اضافه میشه، از همه بهتر خودتان درک میکنید، این کار را امتحان کنید:
۱. تا جایی که مشکل پیش نمیاد کد ها را قرار بدید
۲.همینطوری تا زمانی که مشکل دوباره بارز شد کدها را اضافه کنید
چیزی که باعث مشکل است در ۱-۲ قرار دارد.

ولی سرعت کم شدن ربطی به دات نت فریم ورک ندارد، در تسک منجر مقدار حافضه‌ای را که استفاده میشه را نگاه کنید

Leon_pro
شنبه 12 مرداد 1387, 15:21 عصر
پروژه دومی را که آپلود کردم استفاده کنید.

در ضمن من اصلا متوجه نمیشم چرا نمی تونی از اون کد اولی استفاده کنی ؟؟؟
هر ایرادی داشتته باشه با یکم عقب جلو کردن کد میتونی اجراش کنی.

در هر صورت شما از فایل دومی که آپلود کردم استفاده کن تو صفحه قبل هستش.

در ضمن من به نکته هم رسیدم که وقتی یه فرمی که مثلا توش 10 textbox و 1 grid و چند تا button هست رو میخواد باز کنه انگار که می خواد جون بکنه.

بابا بقیه هم یه نظری یه فکری بدن دیگه.
دارم کم کم از .net زده میشم.همه میدونید که کارفرما ها قبلا برنامه هایی رو که با delphi یا vb6 نوشته شده رو تجروبه کردن که تو اونا فرما مثل باد باز می شدن.حالا این برای .net یه افتضاح کامل با این سرعتش.

ASKaffash
شنبه 12 مرداد 1387, 17:21 عصر
سلام
من یک سئوال می پرسم بعد نظر میدم :
آیا فرمی که شما ادعا میکنید با این تعداد کنترل کند است در حالتی که به هیچ بانک اطلاعاتی متصل نیست و تنها یک تعداد کنترل ساده هستند باز هم کند است ؟ یا عادی است ؟ لطفا اعلام کنید.

Leon_pro
شنبه 12 مرداد 1387, 19:41 عصر
اگر پست های قبلی رو مطالعه کرده باشید میبینید که من توضیح دادم که بعد از چند دقیقه که کار میکنم با برنامه این حالت تشدید میشود و هر لحظه از سرعت آن کاسته میشود.

من اتصال فرم را به دیتابیس قطع کردن سرعت باز شدن فرم برای بار اول بهتر شد اما هنوز پرش در Draw فرم مشهود است.

درضمن من از Stored Procedure برای عملیات Insert Update Delete و Select در تمامی حداول استفاده کرده ام.
وهمچنین از روش http://barnamenevis.org/forum/showthread.php?p=532189#post532189 برای طراحی لایه DAL استفاده کردم.

اگه اوضاع همین جوری پیش بره یه فیلم از اتفاقی که می افته میگیرم و آپلود می کنم تا همتون ببینید.

اَرژنگ
شنبه 12 مرداد 1387, 20:45 عصر
پروژه دومی را که آپلود کردم استفاده کنید.

در ضمن من اصلا متوجه نمیشم چرا نمی تونی از اون کد اولی استفاده کنی ؟؟؟
هر ایرادی داشتته باشه با یکم عقب جلو کردن کد میتونی اجراش کنی.

در هر صورت شما از فایل دومی که آپلود کردم استفاده کن تو صفحه قبل هستش.

در ضمن من به نکته هم رسیدم که وقتی یه فرمی که مثلا توش 10 textbox و 1 grid و چند تا button هست رو میخواد باز کنه انگار که می خواد جون بکنه.

بابا بقیه هم یه نظری یه فکری بدن دیگه.
دارم کم کم از .net زده میشم.همه میدونید که کارفرما ها قبلا برنامه هایی رو که با delphi یا vb6 نوشته شده رو تجروبه کردن که تو اونا فرما مثل باد باز می شدن.حالا این برای .net یه افتضاح کامل با این سرعتش.

قسمتی که زیرش را خط‌ کشیدم و سبز رنگ کردم، اگر ممکن است فقط همان را بفرستید، چونکه اصلا بهش بر نخوردیم.

قسمتی که آبی رنگ شده، مشکل از یک پیچیدگی هست، معلوم نیست که این پیچیدگی در کد زیاد چی هست، پس نتیجتا باید کمترین مقدار کدی که این اشکال براش پیش میاد را بررسی کرد. در ضمن وقتی که تمام کد اراعه داده نشده و اسمبلیهایه خارجی استفاده میشه که سورسشان را نمیتوانیم بررسی کنیم آنالیز کردن پروژه وقط هدر دادن است.

قسمتی که بنفش رنگ کردم، ربطی به دات نت ندارد، فقط کوچکترین پروژه ممکن را که یواش اجرا میشد را بفرستید و به جایه اینکه فکر کنید که دات نت خراب است به این فکر کنید که چه کاری را دارید غیره استاندارد اجرا میکنید که این اتفاق پیش میاد. از فرستادن پروژه‌هایی که سورس کامل را نمیشه بررسی کرد خودداری کنید، قبل از فرستادن بر رویه یک ماشین دیگر بیلدش کنید.

سوال ASKaffash را جواب بدید، با فرستادن یک ویدیو اینکه مشکل دارید را فقط نشان میدید، ولی به حلش کمکی نمیکنید.

لطفا یک پروژه کامل کوچک ساده که تمام سورس کد قابل بیلد هستش بفرستید، که ببینیم مشکل از کجاست، پروژه اولیتان کلی اسمبلیهایه دیگر استفاده میکند که ما نمیتوانیم چکشان کنیم.

باور کنید که یک چیزی در پوژه درست نیست و بدانه داشتن سورس کد کامل (نه اسملبی) ما نمیتوانیم شما را یاری کنیم. بله اینکه مشکل دارید را میبینیم ولی به حل مشکلتان کمکی نمیکند.

Leon_pro
شنبه 12 مرداد 1387, 23:00 عصر
دیگه این فایل رو هم امتحان کردم هم build کردم و تست کردم.

mehdi.mousavi
یک شنبه 13 مرداد 1387, 00:55 صبح
دیگه این فایل رو هم امتحان کردم هم build کردم و تست کردم.

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

1. در نوشتن کد واقعا ضعیف هستین.
2. از هیچ Guideline مشخصی پیروی نمیکنید. (باری به هر جهت مینویسید!)
3. .NET Framework رو اصلا نمیشناسید.
4. چیزی از Validation ها نمیدونید.
5. در مورد Error Handling و Exception Management چیزی نمیدونید.
6. در مورد Command Pattern ها فقط چیزهایی به گوشتون خورده.
و ...

همه اینا رو میشه با نگاه کردن به فایل frm_B_Stuff.cs تشخیص داد. بی جهت نیست، که سرعت اجرا شما رو عصبی کرده و به زانو در آورده.

اَرژنگ
یک شنبه 13 مرداد 1387, 01:36 صبح
سلام.
راستش من از رو کنجکاوی چند تا از فایلهاتون رو نگاه کردم، و بلافاصله متوجه شدم که شما

1. در نوشتن کد واقعا ضعیف هستین.
2. از هیچ Guideline مشخصی پیروی نمیکنید. (باری به هر جهت مینویسید!)
3. .NET Framework رو اصلا نمیشناسید.
4. چیزی از Validation ها نمیدونید.
5. در مورد Error Handling و Exception Management چیزی نمیدونید.
6. در مورد Command Pattern ها فقط چیزهایی به گوشتون خورده.
و ...

همه اینا رو میشه با نگاه کردن به فایل frm_B_Stuff.cs تشخیص داد. بی جهت نیست، که سرعت اجرا شما رو عصبی کرده و به زانو در آورده.
با همه اینها هنوز نمیشه دلیل کند بودنش را توضیح داد.
مشکل این است که حتی نمیتوانم بیلدش کنم که دنباله کد را تعقیب کنیم ببینیم سرعت کجا غیبش میشه.

من کنجکاو هستم که بالاخره بتونم این کد را فقط بیلدش کنم، هنوز بیشتره فرمها باز نمیشند و وقتی که بیلد میکنم ارور میده:
"Error 5 Unable to find manifest signing certificate in the certificate store. Distribution
"
اگر کسی میداند چرا من نمیتوانم این کد را بیلد کنم، ما هم این وسط یک چیزی یاد میگیریم.
ازشان متشکرم که برایه حل مکلشان ادامه میدهند، من اینکه مشکل به دلفی و یا وی بی ۶ ربطی ندارد و در دات نت هم هیچ‌مشکلی نیست را میخواهم اثبات کنم ، ولی چرا نمیتوانم پروژه‌ای را که ایشان گفتند تست و بیلد کردند را من نمیتوانم تکرارا انجام بدم برام سوال شده.

ali_kolahdoozan
یک شنبه 13 مرداد 1387, 06:21 صبح
دوست عزیز و گرامی که سوال در مورد کند بودن مطرح فرمودید :

1- از کنترلهای درون صفحه به شکلهای عجیبی استفاده کردید . مثلا tag خوب درست است که میتواند درون خود مقدارهای مختلف نگه دارد اما روش شما مخصوصا اگر درون حلقه قرار بگیرد کند میشود (شما البته حلقه ندارید یا من ندیدم)
2- از databinding استفاده کردید که این خود میتواند سبب کند شدن هم گردد.
3- یکسری از اعمال خود را مبتنی بر استفاده از wizard قرار داده اید که این باز سبب کندی خواهد بود


در پایان بگویم الان دوستان زیادی می آیند و میگویند ما در فلان پروژه wizard هم داریم اما مشگلی نیست و .... . شما این چند تغییر را اعمال فرمائید اگر درست نشد با من


با نگاه به چند کد دیگر شما کاملا مطمئن شدم که در صورت رفع مشگلات ذکر شده مشکل شما حل میشه . مثلا در جایی دیدم با حرکت روی سطرهای گرید مرطبا binding رو نابود میکنید و باز میسازید . شما قصد منفجر کردن application را دارید؟

در ضمن لازم نیست از چیزی نا امید بشید . وقتی من رانندگی درست بلد نباشم . تقصیر ماشین نیست . سریع همه مشگلات رو گردن net. می اندازید . میدانید چه پروژه هایی باهاش فقط من جوجه برنامه نویس دادم بیرون . دیگه کارهای بزرگ آن طرف آب و این طرف آب بماند

linux
یک شنبه 13 مرداد 1387, 08:17 صبح
با همه اینها هنوز نمیشه دلیل کند بودنش را توضیح داد.
مشکل این است که حتی نمیتوانم بیلدش کنم که دنباله کد را تعقیب کنیم ببینیم سرعت کجا غیبش میشه.

من کنجکاو هستم که بالاخره بتونم این کد را فقط بیلدش کنم، هنوز بیشتره فرمها باز نمیشند و وقتی که بیلد میکنم ارور میده:
"Error 5 Unable to find manifest signing certificate in the certificate store. Distribution
"
اگر کسی میداند چرا من نمیتوانم این کد را بیلد کنم، ما هم این وسط یک چیزی یاد میگیریم.
ازشان متشکرم که برایه حل مکلشان ادامه میدهند، من اینکه مشکل به دلفی و یا وی بی ۶ ربطی ندارد و در دات نت هم هیچ‌مشکلی نیست را میخواهم اثبات کنم ، ولی چرا نمیتوانم پروژه‌ای را که ایشان گفتند تست و بیلد کردند را من نمیتوانم تکرارا انجام بدم برام سوال شده.
از منوی project properties بخش siginig را غیر فعال کنید

linux
یک شنبه 13 مرداد 1387, 10:17 صبح
اگر پست های قبلی رو مطالعه کرده باشید میبینید که من توضیح دادم که بعد از چند دقیقه که کار میکنم با برنامه این حالت تشدید میشود و هر لحظه از سرعت آن کاسته میشود.

من اتصال فرم را به دیتابیس قطع کردن سرعت باز شدن فرم برای بار اول بهتر شد اما هنوز پرش در Draw فرم مشهود است.

درضمن من از Stored Procedure برای عملیات Insert Update Delete و Select در تمامی حداول استفاده کرده ام.
وهمچنین از روش http://barnamenevis.org/forum/showthread.php?p=532189#post532189 برای طراحی لایه DAL استفاده کردم.

اگه اوضاع همین جوری پیش بره یه فیلم از اتفاقی که می افته میگیرم و آپلود می کنم تا همتون ببینید.]
دوست عزیز،روشهایی که استفاده کردید کلا باعث بوجود آمدن آن کندی شده است.
1- از linq استفاده کنید
2- برای هر لایه یک پروژه جدید ایجاد کنید
3- کدها را مرتب بنویسید
4- بهینه کد بنویسید.

اَرژنگ
یک شنبه 13 مرداد 1387, 10:21 صبح
مشکل اصلی از ایشان نیست، تا جایی که میبینم ایشان سعی کردند مفاهیم درست را پیدا کنند و استفاده کنند (لینکی که http://barnamenevis.org/forum/showth...189#post532189 (http://barnamenevis.org/forum/showthread.php?p=532189#post532189) دادند این را میرساند همینطوری کد سرهم نمیکنند).
مشکل اصلی این است که یک پروژه مثال برایه تازه کارها وجود ندارد که ازش یاد بگیرند، مدت زمان زیادی را باید تلف کنند که تیکه تیکه کد پیدا کنند. هم کار میکنند و هم یاد میگرند زمانی برایشان نمیماند.
باید یک سری مقاله تالیف کنیم که تازه کارها ازش استفاده کنند (اگر ما منبعی نداریم که به عنوان روش استاندارد نشان بدیم ، نمیتوانیم ازشان برایه استفاده از روشهایه هشلهف ایراد بگیریم. در گذشته چند بار دوستان این موضوع را به من تاکید کردند ولی من به اینکه هر کی میخواهد یاد بگیرد پیدا میکند اعتقاد داشتم، شاید درام پیر میشم ولی میبینم نبود یک سری پروژکتهایه روشهایه استاندارد (از مایکروسافت) کمکی به یاد گفتن نمیکند. )

پیشنهاد این حغییر این است که چند تا sample project بزاریم در همین انجمن که تازه کارها ازش شروع کنند و یاد بگیرند و بعد از بعد از بزرسی بیان اینجا سوالات پیچیده تر بپرند.

ASKaffash
یک شنبه 13 مرداد 1387, 11:55 صبح
اگر پست های قبلی رو مطالعه کرده باشید میبینید که من توضیح دادم که بعد از چند دقیقه که کار میکنم با برنامه این حالت تشدید میشود و هر لحظه از سرعت آن کاسته میشود.

من اتصال فرم را به دیتابیس قطع کردن سرعت باز شدن فرم برای بار اول بهتر شد اما هنوز پرش در Draw فرم مشهود است.

درضمن من از Stored Procedure برای عملیات Insert Update Delete و Select در تمامی حداول استفاده کرده ام.
وهمچنین از روش http://barnamenevis.org/forum/showthread.php?p=532189#post532189 برای طراحی لایه DAL استفاده کردم.

اگه اوضاع همین جوری پیش بره یه فیلم از اتفاقی که می افته میگیرم و آپلود می کنم تا همتون ببینید.

سلام
هنوز نمی خواهم نظر دهم . لطفا SP آن فرمی که عملیات UpDate و Insert و Delete را انجام میدهد را قرار دهید(چون در شرایط عادی یک فرم با کنترلهای متصل نشده کند نیست)

Leon_pro
یک شنبه 13 مرداد 1387, 14:15 عصر
ممنون که اهمیت دادید.


همه اینهایی که گفتید مشکل من رو حل نمیکنه اگه sample دارید بگذارید تا همه استفاده کنند. شاید اینجوری این تاپیک هم سبب خیر بشه برای بقیه.

ASKaffash
یک شنبه 13 مرداد 1387, 17:15 عصر
ممنون که اهمیت دادید.


همه اینهایی که گفتید مشکل من رو حل نمیکنه اگه sample دارید بگذارید تا همه استفاده کنند. شاید اینجوری این تاپیک هم سبب خیر بشه برای بقیه.

سلام دوست من
آیا شما کمک میخواهید یا نه ؟ حتما تجربه مشابه ای داریم من 7 سال برنامه نویس VB6 هم بوده ام و C# هم زیاد برنامه نوشته ام از کوچک تا بزرگ همین 2 ماه قبل در سازمان من اتفاقی شبیه به مشکل شما به وقوع پیوست و تحت شبکه یک بخش برنامه به طرز وحشتناکی کند شد (با VB6 بود ) هیچکس راه حل آن را نیافت وهمه به تغییر سخت افزار وپهنای باند به توافق رسیدند ولی بعدا (به ماند چطوری!) بخشی که 20 دقیقه طول میکشید که CPU سرور به سقف می چسبید تبدیل شد به نیم ثانیه. لطفا اعتماد کنید شاید توانستیم کمک کنیم مثال نمونه چه کمکی می کند!

Leon_pro
یک شنبه 13 مرداد 1387, 23:37 عصر
من با توجه به لینکی گذاشتم به عنوان مرجع طراحی برای لایه DAL خودم ابتدا هر تغییری که در دیتا میخوام انجام بدم رو روی DataTable پیاده میکنم مثل حذف و درج و ویرایش بعد Datatable v رو به صورت یک آرگومان به متدد
TableAdapte.Update(DataTable); میدم و فکر میکنم مشکل از همین باشه . چون تو پروژه قبلیم هم از همین روش برای DAL استفاده کردم با این تفاوت که اونجا به طور مثال برای درج کردن مستقیما از متدد TableAdapter.Insert استفاده می کردم و بعد از اون دوباره DataTable رو Fill میکردم و به همین ترتیب برای Delete و Update رکورد ها . در اون پروژه هم مشکل سرعت رو داشتم ولی نه به این شدت و به این وضوح .

ASKaffash
دوشنبه 14 مرداد 1387, 08:36 صبح
سلام
خوب طبیعی است چون با افزایش تعداد رکوردها زمان استخراج مجدد داده ها توسط متد Fill افزایش می یابد .ولی قبلا شما گفتید که برای عملیات Insert و Update تعدادی SP نوشته اید حال اگر میخواهید زمان وسرعت در احتیار خودتان باشد و افزایش حجم داده ها خیلی برفرآیندهای ذخیره و بازیابی شما موثر نباشد یک DataRow ایجاد کنید و داده ها را از درون فرم جمع آوری کنید ودر این DataRow قرار دهید و در DAL متدهای Insert و Update ایجاد کنید که ورودی یک DataRow را دریافت کنند(نام جدول هم میخواهید و ConnectionString و ...) بعد دستور Insert و UpDate را خودتان درون متد بسازید و به SQLServer ارسال کنید (یا از طریق یک SP) و نتیجه عملیات را به فرم منعکس کنید(شبیه همان کاری که خودش با InsertCommand و UpdateCommand درون TableAdapter یک DataSet انجام میدهد) اگر DataGridView هم داشته باشید که قرار است بصورت اتوماتیک Refresh شود یک کارهائی آنجا هم نیاز است فعلا این موضوع را تست کنید و افرایش سرعت را ببینید(در خصوص متد UpDate یادت نرود PK رکورد را باید بعنوان ورودی ارسال کنی)

Masiha1986
دوشنبه 14 مرداد 1387, 09:52 صبح
من کنجکاو هستم که بالاخره بتونم این کد را فقط بیلدش کنم، هنوز بیشتره فرمها باز نمیشند و وقتی که بیلد میکنم ارور میده:
"Error 5 Unable to find manifest signing certificate in the certificate store. Distribution
"


با سلام
علت این Error اینه که این دوستمون خواسته پروژه رو ببره روی Click Once. برای رفع این مشکل به Properties پروژه برید و توی قسمت Signing تیک مربوط به Sign the ClickOnce manifests رو بردارید.

Leon_pro
دوشنبه 14 مرداد 1387, 12:41 عصر
آقایون با تجربه لطفا با هم دیگه هم کاری کنید و یک sample کوچیک قرار دهید تا همه حداقل بدونن چه جوری باید راهشونو پیدا کنن تا آخر عاقبتشون مثل من نشه .

خودتون میدونید که متدولوژی های گوناگونی وجود داره و همه این ها برای تازه کار ها گیج کنندس . یا حداقل بگبد از چه متدولوژی هایی باید استفاده بشه و از کدوم ها نباید استفاده بشه مخصوصا تو طراحی اتوماسیون های اداری و صفحات وب.

اگه حداقل لیستی از متدولوژی هایی که باید استفاده بشه بگید این باعث میشه آدم راهش شفاف تر بشه و به در و دیوار نزنه و خودش بره دنبال یادد گیری اون ها.

RED-C0DE
دوشنبه 14 مرداد 1387, 15:53 عصر
آقایون با تجربه لطفا با هم دیگه هم کاری کنید و یک sample کوچیک قرار دهید تا همه حداقل بدونن چه جوری باید راهشونو پیدا کنن تا آخر عاقبتشون مثل من نشه .

خودتون میدونید که متدولوژی های گوناگونی وجود داره و همه این ها برای تازه کار ها گیج کنندس . یا حداقل بگبد از چه متدولوژی هایی باید استفاده بشه و از کدوم ها نباید استفاده بشه مخصوصا تو طراحی اتوماسیون های اداری و صفحات وب.

اگه حداقل لیستی از متدولوژی هایی که باید استفاده بشه بگید این باعث میشه آدم راهش شفاف تر بشه و به در و دیوار نزنه و خودش بره دنبال یادد گیری اون ها.

خیلی جاها و خیلی کاربرا همین مشکلی که ذکر شد رو دارن، من هم اولش برام گیج کننده و نامفهوم بود (منظورم پیاده سازی واقعی چنین نرم افزاری در عمل هست) و با دیدن و بررسی چند نمونه آماده برام جا افتاد که کی چیه و چی کیه!
(البته چنین نمونه هایی هم فکر کنم قبلا گذاشته شده توی سایت و من خبر ندارم ولی اگه بشه متمرکزش کرد خیلی خوب می شه بعلت اهمیت طراحی و پیاده سازی ای که به اون طراحی ،مستقیما مربوط می شه...)
در واقع منِ نوعی که می خوام یک برنامه معمولی که با دیتابیس سر و کار داره (مثلا) رو بنویسم و فقط راجع به طرح 2لایه و 3لایه و 4لایه و nلایه یه چیزایی رو شنیدم از توی سایت برنامه نویس شاید به هر زحمتی که شده بتونم طرح و ساختاری رو برای صورت مسئله خودم درست کنم که کارم رو راه بندازه که کاملا هم سلیقه ای از صفر نوشتمش و اسمش رو هم بذارم طرح multiLyer! ولی به چه قیمتی؟! یک چیز کاملا مشخصیه .. ممکنه بعلت ضعف ساختاری ، بخاطر تغییری که در صورت مسئله رخ می ده یا 1002 دلیل دیگه مجبور بشم اونقدر وقت بذارم (به این علت که می خوام چند لایه باشه!) تا دوباره با تغییراتی که می دم ، ساختار جدید رو هم بنا به سلیقه خودم nلایه تلقی کنم...

می خواستم پیشنهادی بدم و اون اینکه ، چقدر خوب می شه یکی از دوستان مجرب، طرح یک برنامه نمونه و خوب که با بشه با چنین ساختاری (طرح چند لایه) اون رو پیاده سازی کرد (از 0 تا 100) رو در یک تاپیک جدید مخصوص خودش مطرح کنه و اول اونایی که واقعا اینجا هستن و خوشحال می شن سطح بقیه هم بالا بره، نمونه کدهای خودشون رو که طبق اصول و حرفه ای نوشتن در اختیار بقیه قرار بدن و به همین صورت پیش بره تا به یک سری نمونه پیاده سازیهای کامل و حرفه ای برسیم تا بشه روی اونا صحبت کرد و نظر داد و استناد کرد...

در واقع طوری بشه که پیاده سازی واقعی این الگوهای تئوری رو نشون داده بشه و از تئوری محض هم جلوگیری بشه...
دوست دارم نظر شما رو هم بدونم و اگه موافق بودین و هر وقت که شد با همکاری مدیران بخش و سایر دوستان این تاپیک رو راه بندازیم...:لبخندساده:

(نمی دونم خود این پستی که زدم بهتر بود توی یه تاپیک جدید می زدم یا همینجا هم جواب می ده!)

RED-C0DE
سه شنبه 15 مرداد 1387, 19:25 عصر
فکر می کردم بیشتر از این موافق این قضیه باشین...!

Leon_pro
سه شنبه 15 مرداد 1387, 19:34 عصر
متاسفانه همه فقط حرف میزنن که فلان و بسمان و ما آره ه ه ه دیگه تهشیم.
ولی دریق از یکم همکاری یا همفکری با دیگران.
اگه می خواید کاری کنید بجنبید.

اَرژنگ
چهارشنبه 16 مرداد 1387, 01:52 صبح
پیدا کردن و در دسترسی قرار دادن مثالها زمان لازم دارد.

گفتن اینکه "اگه می خواید کاری کنید بجنبید." آسان است ولی اول باید دانست که
۱. کاری که لازم است چی هست؟
۲.چه جوانبی باید در نظر گرفته بشد؟

بعدش تازه میشه شروع کرد.

در ضمن جواب سولهایه بالا فقط به یک نفر نیست، حداقل باید یک توافقی در مورد هدف و نحوه انجام گیری باشد.

کسانی که قادرند کاری انجام بدند و کمک کنند به احتمال زیاد کار میکنند و خانواده دارند، زمانی کمی هم که برایشان میماند میان اینجا سعی میکنند کوتاه و مختصر جوابی بدند و کمک کنند. درخواسها را میشه یک توپیک خودش جمع کرد و بالایه این تالار کوبید. ولی نمیتوانیم از کسی انتظار داشته باشیم.

ali_kolahdoozan
چهارشنبه 16 مرداد 1387, 06:41 صبح
دیگر برای شما چه کنند همه . گفتیم یکسری اصلاحات بده به برنامت ریزش رو هم بهت دادیم . بعد باز بزار تا همه ببینند و نظر بدهند تا بری جلو . منتظر نباش کسی برات سورس بزاره . شما باید سورست رو بهبود بدهی و بقیه ببینند و کمکت کنند

اَرژنگ
چهارشنبه 16 مرداد 1387, 07:07 صبح
دیگر برای شما چه کنند همه . گفتیم یکسری اصلاحات بده به برنامت ریزش رو هم بهت دادیم . بعد باز بزار تا همه ببینند و نظر بدهند تا بری جلو . منتظر نباش کسی برات سورس بزاره . شما باید سورست رو بهبود بدهی و بقیه ببینند و کمکت کنند

با سلام خدمتتان جناب کلاهدوزان،
مشکل ایشان این است که الگویی ندارند که به طرفش حرکت کنند. تا زمانی که یک مثال ساده برایه روشهایه درستی که استفاده کنند نباشه ایشان نمیدانند چکار کنند.
ما هم نمیتوانیم انتظار داشته باشیم که چرا اشتباه پیش میرند ( اگر مثال درست نباشد نه ایشان میدانند که راه درست چی هست و نه میتوانیم بهشان اشکال بگیریم که چرا از راه درست استفاده نمیکنند.)
قبلان من اشکال میگرفتم، ولی میبنم که چرا لازم است که یک سری مثال باشد که به عنوان الگویه درست کار کردن در دسترسی همه قرار بدیم.

ali_kolahdoozan
چهارشنبه 16 مرداد 1387, 09:48 صبح
قبلان من اشکال میگرفتم، ولی میبنم که چرا لازم است که یک سری مثال باشد که به عنوان الگویه درست کار کردن در دسترسی همه قرار بدیم.

با تشكر . منتظر مثالهاي متعدد شما هستيم . (مگر بقيه مثال گير آوردن ) بعدش هم توي code project و .... يا توي msdn و google پر از مثالهايي است كه مثل برنامه نويسهاي در حد شما و من در مقابلش هيچي نيست . ما كه از آنها الگو ميگيريم . ديگر نيازي به اشاره مستقيم لينك و آدرس كه نيست

اَرژنگ
چهارشنبه 16 مرداد 1387, 16:27 عصر
با تشكر . منتظر مثالهاي متعدد شما هستيم . (مگر بقيه مثال گير آوردن ) بعدش هم توي code project و .... يا توي msdn و google پر از مثالهايي است كه مثل برنامه نويسهاي در حد شما و من در مقابلش هيچي نيست . ما كه از آنها الگو ميگيريم . ديگر نيازي به اشاره مستقيم لينك و آدرس كه نيست
با سلام
ولی اون مثالها از حد یک شروع کننده بالاتر هستند، و کسانی مانند من و شما میتوانند انتخواب کنند که کدام مثالها بدردشان میخورد و بهشان لینک بدیم.
حداقل یک سری لینک به مثالهایی که بدرد شروع کنندها باشد که بگیم از یک چیزی یاد بگیرند کار استاندارد چی هست.

ASKaffash
چهارشنبه 16 مرداد 1387, 17:14 عصر
سلام
دوست عزیز وقتی شما جواب من را در تاپیک 28 نمی دهید حق بدهید که دلخور شویم شما پا به پا جلو بیائید و برادری ثابت کنید و اگر لازم شود از درون Engine هایمان (برخلاف عرف ) کد جدا میکنیم و قرار میدهیم ولی نحوه برخورد شما انسان را دلسرد میکند درضمن یک موضوع خیلی مهم است و اینکه دوستان به یکدیگر کمک میکنند و اگر پاسخی دریافت نشود نباید کسی از کسی طلبکار باشد قصد توهین به هیچکس را ندارم واگر کسی از نوشته ام ناراحت شود ازقبل ازوی معذرت میخواهم.
هرچند که غلط است ولی برای شروع یک بخش از لایه DAL خود را که برای بانک SQLServer دستور Update را میسازد برای اثبات ادعایم در تاپیک 28 قرار میدهم :


internal static string Update(string TableName, DataStruct DataStruct)
{
if (TableName == null || TableName.Trim() == "" || DataStruct.Count == 0)
return "";
string SQLUpDate = "UpDate " + TableName.Trim() + " Set ";
string PkWhere = "";
string ConvertValue = "";
for (int i = 0; i < DataStruct.Count; i++)
{
switch (DataStruct.ColumnType[i])
{
case FieldFormat.PrimaryKey:
DataStruct.PKValue = Convert.ToInt64(DataStruct.ColumnValue[i]);
DataBase.Tag = DataStruct.PKValue;
ConvertValue = DataStruct.ColumnValue[i].ToString();
PkWhere = DataStruct.ColumnName[i].Trim() + "=" + ConvertValue;
break;
case FieldFormat.String:
ConvertValue = SQLString(DataStruct.ColumnValue[i].ToString());
break;
case FieldFormat.Numeric:
ConvertValue = DataStruct.ColumnValue[i].ToString();
break;
default:
ConvertValue = "default";
break;
}
if (DataStruct.ColumnType[i] != FieldFormat.PrimaryKey)
SQLUpDate += (i == 0 ? "" : ",") + DataStruct.ColumnName[i].Trim() + "=" + ConvertValue;
}
return SQLUpDate + " Where " + PkWhere;
}

choobin84
چهارشنبه 16 مرداد 1387, 17:38 عصر
در ابتدا که برنامه اجرا میشه همه چی خوبه تا اینکه چند دقیقه از اجرا میگذره برنامه به حدی کند میشه که به طور مثال برای باز شدن یه فرم 10 ثانیه طول میکشه انگار که همه چی slow motion .:عصبانی++::عصبانی++::عصبانی++:



و همه چیز به خوبی و خوشی، صورت سئوال رو پاک کرد.
نمونه کد و الگو که نشد جواب این سئوال....

choobin84
چهارشنبه 16 مرداد 1387, 17:53 عصر
سلام
هنوز نمی خواهم نظر دهم . لطفا SP آن فرمی که عملیات UpDate و Insert و Delete را انجام میدهد را قرار دهید(چون در شرایط عادی یک فرم با کنترلهای متصل نشده کند نیست)

جواب این سئوال چی شد؟.....

linux
چهارشنبه 16 مرداد 1387, 20:03 عصر
با سلام
ولی اون مثالها از حد یک شروع کننده بالاتر هستند، و کسانی مانند من و شما میتوانند انتخواب کنند که کدام مثالها بدردشان میخورد و بهشان لینک بدیم.
حداقل یک سری لینک به مثالهایی که بدرد شروع کنندها باشد که بگیم از یک چیزی یاد بگیرند کار استاندارد چی هست.
من یک برنامه لازم دارم برای بایگانی CD,DVD و کتابخانه اگر حالش را دارید بصورت اپن سورس بنویسم که هم به دردمان خورده باشد هم بقیه استفاده کرده باشند

Leon_pro
چهارشنبه 16 مرداد 1387, 20:24 عصر
این هم SP ها.

Editali
دوشنبه 12 اسفند 1387, 04:35 صبح
سلام Leon_proی عزیز.
از تاخیر طولانی مدت خودم عذرخواهی میکنم.
فکر نمیکردم این مشکل ساده رو کسی نتونسته باشه حل کنه.
ببخشید اگه دیر جواب میدم، ولی امیدوارم که این نکات ساده و مهم رو توی کارای بعدیتون بیشتر رعایت کنید تا دیگه ازین مشکلا براتون پیش نیاد.
سورس شما رو دیدم، خیلی تعجب کردم.
برای دوستانی که خیلی به برنامه نویسیشون اعتماد دارند واقعا متاسفم!
قبل از همه این جوابایی که اینجاست و بدون دیدن سورس شما گفته بودم که مشکل شما در طراحی دیتابیس و استفاده از منابعه.

همه چیزو با دقت بخونین، ساده و روان گفتم



منابع چیست؟!؟!؟!

بطور خلاصه: حافظه، فایل، رسانه های IO و ...

با برنامه شما رم میترکه!!!

چرا این آقایون حرفه ای به دیتاست شما و انواع داده ای توجه نکردند؟

از شما یه سوال میپرسم:
ماکزیمم مقداری که نوع داده decimal میتونه تو خودش جا بده چقرده؟ (تو SQL)
حتما همه میدونید: 10e38=10,000,000,000,000,000,000,000,000,000,000,0 00,000 !!! (چقدر زیاد)
اگر ما 1000 تا ازین نوع رو بیاریم بذاریم تو رم چه اتفاقی میوفته؟

90kb فضا

حالا با توجه به دیتاست شما، اگه این تعداد به 1 میلیون برسه چی میشه؟


!!!!!!!!!!!!!!!!!!!BOOOOOOOOOOOOOOOOOOOOOOM!!!!!!! !!!!!!!!!!!!!!!!!!

همه چیز میترکه!

90mb!!!!

که اگه با برنامه های دیگه Share بشه و هی قرار باشه با این حجم عظیم داده کار بشه باید فاتحه سیستم رو خوند!
بماند که تو برنامه شما بعد از 2 هفته کار بیشتر از 1 میلیون داده از نوع دسیمال تو رم میاد.
*
*
*
*
*
راه حل چیه؟

انتخاب درست.

یه سوال:
تو کل دنیا چند تا شهر+ده+رودخونه+شکارگاه+کوه+ ویر+دریا+... داریم؟

فکر نکنم به ازای هر نفر یه شهر یا دریا یا ... وجود داشته باشه، مگه نه؟


یه سوال دیگه:
یه شرکت پخش که داخل یه کشور داره کار میکنه، حداکثر میتونه چندتا مشتری داشته باشه؟
مطمئنا حتا 0.01 جمعیت اون کشور هم نمیشه.

بازم سوال:
طولانی ترین اسمی که برای یک نفر، یک شهر یا روستا! میشه نوشت چند حرفه؟

سیستان و بلوچستان= 17 کارکتر

حاج سید امیرحسین دوشان تپه ای اصل تهرانی (!!!)=40 کارکتر

آدرس چطور؟

کره زمین - آسیا - ایران - سیستان و بلوچستان - زاهدان - بخش امیریه - روستای محمدیه - کوچه گودرزی - پلاک 160 = فقط 106 کارکتر!!!

تو ایران شماره موبایل چند رقمه؟ 11 رقم
فکس یا تلفن چطور؟ با احتساب کد شهرها که حداکثر 5 رقمیه و شماره های تهران که 8 رقمیه میشه 13 رقم.


با این تفاسیر چرا در جدول tblCustomer ، نام مشتری 300 حرفه؟!؟!
یا تو همون جدول آدرسش 500 حرفه؟
تلفن 20 حرف و موبایل 30 حرفه!!!



مگه یه شرکت چندتا ویزیتور داره که کد ویزیتوراش باید 8-9 بایتی باشه؟
9 بایت = 4722366482869645213696 (میشه 1428571428571428571428بار واسه کل دنیا کد داد!)


با این طرز انتخاب انواع داده و همچنین سطح برنامه نویسی شما حدس میزنم که انواع رشته ای شما توی دیتابیس از نوع char یا nchar باشه.

نکته: char و nchar به اندازه ای که نعریف میشوند فضا اشغال میکنند. بهتره بجای اینا از نوع varchar برای رشته های عددی و انگلیسی و از نوع nvarchar
برای رشته های unicode استفاده کنید، چون این نوعها فقط به اندازه رشته ای که درونشون قرار میگیره فضا اشغال میکنند.



راه حل:

تمامی فیلدهای رشته ای رو به varchar و nvarchar تغییر بده.
با توجه به ماکزیمم مقداری که توی یه فیلد قرار میگیره نوع اون فیلد رو عوض کن. مثلا جدول tblDriver رو به این شکل تغییر بده:

CREATE TABLE [tblDriver] (
[DriverID] [smallint] IDENTITY (1, 1) NOT NULL ,
[DriverUserID] [smallint] NOT NULL ,
[DriverName] [nvarchar] (30) COLLATE Arabic_CI_AS NOT NULL ,
[BirthDate] [nvarchar] (10) COLLATE Arabic_CI_AS NOT NULL ,
[IDNumber] [nvarchar] (10) COLLATE Arabic_CI_AS NOT NULL ,
[CarNumber] [nvarchar] (14) COLLATE Arabic_CI_AS NOT NULL ,
CONSTRAINT [PK_tblDriver] PRIMARY KEY CLUSTERED
(
[DriverID]
) ON [PRIMARY]
) ON [PRIMARY]
GO


بقیه جدولها رو هم همینجور درست کن تا هر ردیف داده کمترین فضا رو اشغال کنه.
اصلاح دیتاست فراموش نشه.

امیدوارم که دیگه ازین اشتباها نکنید، هم شما و هم همه دوستان دیگه.

موفق باشی.