ورود

View Full Version : مقایسه آیدی با رکوردهای زیاد



forestasphalt
شنبه 13 مهر 1392, 22:44 عصر
با سلام
من یه سری رکورد دارم حدود 350 هزار تا
یه حلقه گذاشتم و اطلاعات رو میخونم
مجبورم هر آیدی (10 رقمی) رو که اضافه میکنم با این n آیدی رکورد خونده شده توسط حلقه مقایسه کنم اگر آیدی تکراری بود آپدیت کنم و اگر تکراری نبود به مجموعه اضافه کنم ،ابتدای حلقه سرعت مناسبی دارم و لی هر چقدر به طرف اضافه شدن شمارنده حلقه میرم کند تر میشه و دلیلش هم اینه که با اعداد بیشتری مقایسه میکنم
من این ایدی هایی مورد نظر رو در دیکشنری قرار دارم وآیدی مورد نظر رو با دیکشنری مقایسه میکنم ،با لیست هم امتحان کردم ولی سرعت فرق چندانی نکرد!
میخواستم ببینم راه بهتری وجود داره برای مقایسه کردن این جور موراد؟
چیزی که به ذهنه خودم میرسم اینه که الگوریتم هایی مثل جستجوی باینری استفاده کنم و باعث بشه تعداد مقایسه هام به شدت پایین بیاد
در حال حاظر از ()linq firstordefault استفاده میکنم
الگوریتم های مثل باینری از متد هایی مانند firstordefault سریعتر هست؟
با تشکر

sasanrstm
یک شنبه 14 مهر 1392, 05:54 صبح
سلام این آیدی 10 رقمی رو با چه روشی اضافه میکنی منظورم از طریق تکست باکس یا چی؟ اگه از تکست وارد میکنی خب. اول یه سلکت بزن تو جدولت بر اساس عددی که تو تکست هست. اگر اون عدد تو جدولت بود آپدیتش کن وگرنه اینضرت کن.

forestasphalt
یک شنبه 14 مهر 1392, 09:54 صبح
با تشکر
مشکلم اینه که تعداد مقایسه ها با زیاد تر شدن تعداد رکوردها به صورت نجومی زمان گیر تر میشه!

bayatvahid
یک شنبه 14 مهر 1392, 12:03 عصر
سلام

اگه رکوردهای جدید رو توی یه لیست داری :

یه لیست از رکوردهای جدید میخوای که با یه ویژگی(Property) برای هر رکورد مشخص شده باشه که این رکورد توی لیست اصلی هست یا نه؟

بهترین و سریع ترین روش انجام این کار(با توجه به اطلاعات من) استفاده از Left Join دو تا لیست اصلی و رکورد های جدیده.

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

نمونه کد Left Join Linq :


var Result = (from i in newList
join j in generalList on i.ID equals j.ID into res
from subpet in res.DefaultIfEmpty()
select new
{
ID = i.ID,
Name = i.Name,
Code = i.Code,
Exist = (subpet == null ? False : True)
}).ToList();