PDA

View Full Version : سوال: ساخت دیکشنری



sepehr1014
پنج شنبه 05 خرداد 1390, 12:17 عصر
سلام
من دارم یک دیکشنری میسازم. برای لغات نمیخوام از دیتابیس استفاده کنم. از SortedDictionary که در C#.Net هست استفاده میکنم. با توجه با اینکه تعداد لغات حدود 300,000 تا هست، سرعت لود برنامه بسیار پایین هست و تقریبا رو سیستم من 20 ثانیه طول میکشه تا لود شه. لود لغات به این صورت هست:

public SortedDictionary<string, string> en = new SortedDictionary<string, string>();
en.Add("limpet", "n. marine mollusk with a cone shaped shell which adheres to rocks along the shoreline; one who refuses to let go, one who clings");
en.Add("limpid", "adj. transparent; easy to understand, clear, unclouded; calm, serene");
en.Add("limpidity", "n. clearness; transparency; calmness, stillness");
en.Add("limpidly", "adv. clearly; transparently; calmly");
en.Add("limpidness", "n. clearness; transparency; calmness, stillness");

به نظرتون برای افزایش سرعت چیکار کنم؟ میشه همین رو تو C++ پیاده کرد؟ سرعت فرقی میکنه؟

ممنون

sepehr1014
جمعه 06 خرداد 1390, 20:45 عصر
کسی نظری نداره؟

haghft
جمعه 06 خرداد 1390, 21:42 عصر
گرچه کلا با این روش موافق نیستم ولی میتونی از backgroundworker استفاده کنی که نحوه استفادشو تو نمونه ذکر کردم و برای قسمت سرچشم از LINQ استفاده کن.

sepehr1014
شنبه 07 خرداد 1390, 09:37 صبح
ممنون.
کد MultiThread اینه:
backgroundWorker1.RunWorkerAsync();

میشه در مورد RunWorkerAsync کمی توضیح بدید و اینکه دستوراتی رو که اجرا میکنه از کجا میاره؟ (چون دستورات تو یه تابع دیگه هستن و تو این کد، اون توابع فراخوانی نشدن!؟)

haghft
شنبه 07 خرداد 1390, 12:14 عصر
ممنون.به جاش از دکمه تشکر استفاده کنید.
چرا دیگه،در رویداد DoWork هرچی بنویسید انجام میده در واقع وقتی شما RunWorkerAsync رو میزنید رویداد DoWork انجام میشه در یک ترد(نخ) جدید.

sepehr1014
شنبه 07 خرداد 1390, 15:40 عصر
میدونم. ولی کجا تعریف کردیم که این تابع رو اجرا کنه؟؟

haghft
شنبه 07 خرداد 1390, 15:48 عصر
میدونم. ولی کجا تعریف کردیم که این تابع رو اجرا کنه؟؟
:متعجب: مگه شما تو رویداد DoWork ننوشتی؟هر چی تو DoWork بنویسی رو تو یه نخ جدید اجرا میکنه دیگه!