PDA

View Full Version : تجزیه و تحلیل یک winapplication



saba106
شنبه 01 تیر 1392, 20:58 عصر
سلام. من باید برنامه ای بنویسم که کارش تشخیص مغایرت بارکد وارد شده توسط اسکنر و کد متناظر با اون درون بانک است. این برنامه به ظاهر خیلی سادس ولی سرعت انجام کار و ظاهرش خیلی مهمه. بانکی که اطلاعات باید توش بررسی بشه شاید نزدیک به 10000 رکورد داشته باشه. ممنون میشم در این مورد راهنماییم کنین

mehdy.programmer
شنبه 01 تیر 1392, 21:56 عصر
دوست عزیز شما می خوای کدی که داری رو چک کنی ببینی تو دیتابیس هست یا نه و اگه نبود چیکار کنه؟ اگه بود چیکار کنی؟ شما خیلی کلی توضیح دادی می خوای چیکار کنی. بهتره شما خودت شروع کنی برنامه رو بنویسی و جایی که مشکلی داشتی سوالتو دقیقا در مورد اون قسمت مطرح کنی...

veniz2008
شنبه 01 تیر 1392, 22:31 عصر
سرعت انجام کار و ظاهرش خیلی مهمه. بانکی که اطلاعات باید توش بررسی بشه شاید نزدیک به 10000 رکورد داشته باشه. ممنون میشم در این مورد راهنماییم کنین
سلام.
مقایسه یک کد با 10 هزارتا و 100 هزار تا مثل یه جوک میمونه برای sql server .
الان بحث بر سر میلیون ها رکورد هست. ولی در کل این نکات رو میتونید برای برنامه های سنگین استفاده کنید :
1. کلید جدول رو که معمولا جستجوهای زیادی بر پایه اون انجام میشه، حتی الامکان int در نظر بگیرید. چراکه سرعت در جستجوی فیلدهای عددی نسبت به غیر عددی بیشتر هست.
2. کلید رو تا حد امکان ساده بگیرید و از ابرکلید(کلید ترکیبی) استفاده نکنید.
3. تا حد امکان از nvarchar استفاده نکنید چراکه دو برابر varchar فضای دیتابیس رو اشغال میکنن. به نظر میرسه تاریخ رو میشه varchar گرفت.
4. تا حد امکان جداول رو به گونه ای بسازید که نیاز به join های بی مورد بین جداول نباشه.
5. به غیر از فیلد کلید که خود sql بصورت اتومات یک clustered index براش میسازه. خودتون با توجه به نیاز پروزتون یک یا چند non clustered index برای جداولتون ایجاد کنید. البته در ایجاد تعداد زیاد این ایندکس ها زیاده روی نکنید. یکی از راه های تشخیص اینکه چه فیلدی رو non clusterd index قرار بدید اینه که روی چه فیلدی بیشتر عملیات جستجو رو انجام می دید. البته معیارهای دیگه ای هم هست که توصیه میکنم حتما درباره ایندکس ها مطالعه بفرمایید. چون ایندکس مناسب بر روی سرعت جستجوها (در تعداد رکوردهای زیاد) قدرت خودش رو به معرض نمایش میزاره.
6. استفاده از کوئری های بهینه. فرض کنید بخوایم بفهمیم که آیا یک شماره شناسایی (کلید) که توسط کاربر وارد شده است در جدولی با تعداد رکوردهای خیلی زیاد وجود داره یا نه. برای این کار دو کوئری زیر رو در نظر بگیرید :
1. استفاده از دستور EXISTS :

if(EXISTS(select UserID from TblUser where UserID = @userid))
2. استفاده از count :

select count(UserID) from TblUser where UserID = @userid

کوئری اول (دستور EXISTS ) به محض پیدا کردن رکورد، دیگه جستجو رو ادامه نمیده ولی کوئری دوم (دستور count) تا آخرین رکورد جدول رو پیمایش میکنه. این فقط یک مثال ساده بود. این مطلب رو در کنار ایندکس مناسب، بسیار جدی در نظر بگیرید.
7. سخت افزار قدرتمند. بدون شک شما برای محاسبه و جابه جایی اطلاعات به cpu و رم مناسب نیاز خواهید داشت.
گذشته از این موارد، طراحی درست و سبک کدنویسی شما میتونه اهمیت زیادی داشته باشه. مثلا استفاده از stored procedure ها در مقایسه با روش های معمولی بسیار کارآمدتر خواهد بود.
موفق باشید.

davidrobert
شنبه 01 تیر 1392, 22:45 عصر
بفرمایید اینک کد برای داستگاه های اسکنر بر کد خوانhttp://vcsharp.ir/download/A-Solution-For-Working-With-Scanners