ورود

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



saeidd
چهارشنبه 05 خرداد 1395, 09:34 صبح
سلام.
من در دیتابیسم متن کتابهایی رو نگهداری می کنم که تعداد صفحات شون خیلی زیاده؛ مثلا 5000 صفحه. و بعضی هاش 10000 صفحه. حالا مشکل اینه که لود کردن هر کدوم از کتابها داخل RichEdit با سرعت خیلی پایینی انجام میشه. (چه از RichEdit1.Lines.Text استفاده کنم و چه از RichEdit1.Lines.LoadFromStream) آیا راهی وجود داره که بشه با سرعت خوبی این کار رو انجام داد؟

دیتابیسم SQlite هستش.

Mask
چهارشنبه 05 خرداد 1395, 11:53 صبح
بانک اطلاعاتی قویتری مثل MySql انتخاب کنید.

saeidd
چهارشنبه 05 خرداد 1395, 13:13 عصر
بانک اطلاعاتی قویتری مثل MySql انتخاب کنید.
در اصل قضیه خیلی تفاوت نمی کنه، چون حجم متنها بالاست. من کتابهای 20 هزار صفحه ای و در مواردی 50 هزار صفحه ای هم دارم. ضمن اینکه نمی خوام کاربر رو درگیر نصب دیتابیس کنم.

فکر می کنم باید شیوه ذخیره و بازیابی رو عوض کنم. مثلا باید کتابها رو صفحه صفحه ذخیره کنم و موقع لود کردن با یه شیوه ای صفحات رو پشت سر هم لود کنم. ولی نمی دونم چه جوری!

Mahmood_M
چهارشنبه 05 خرداد 1395, 13:52 عصر
بهتره دو تا جدول داشته باشید، یک جدول اطلاعات کتاب و یک جدول برای صفحات که مثلا فیلدهای شماره صفحه و متن رو داره و به وسیله فیلدی مثل ID به جدول کتابها متصل میشه
درون برنامه هم می تونید یک لیست از کتابها داشته باشید و یک لیست Detail از صفحات، که با انتخاب هر صفحه در لیست Detail، متن همون صفحه درون RichEdit لود بشه

saeidd
چهارشنبه 05 خرداد 1395, 18:07 عصر
بهتره دو تا جدول داشته باشید، یک جدول اطلاعات کتاب و یک جدول برای صفحات که مثلا فیلدهای شماره صفحه و متن رو داره و به وسیله فیلدی مثل ID به جدول کتابها متصل میشه
درون برنامه هم می تونید یک لیست از کتابها داشته باشید و یک لیست Detail از صفحات، که با انتخاب هر صفحه در لیست Detail، متن همون صفحه درون RichEdit لود بشه
این راه خوبیه. البته درون برنامه به جای داشتن لیست کتابها و لیست Detail ، یه TreeView دارم که در واقع فهرست درختی کتابهاست با همه زیر شاخه هاش و کاربر با کلیک روی هر کدام از گره ها متن مربوطه رو می بینه.

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

مثلا باید اسکرول بار خود RichEdit غیر فعال بشه و از یه اسکرول بار دیگه استفاده بشه. بعد تو جدول صفحات کتاب تعداد خطهای هر صفحه هم نگهداری بشه که مقدار Max این اسکرول بار مجموع تعداد خطوط باشه. حالا این مشکلش اینه که وقتی کاربر از طریق تنظیمات برنامه اندازه فونت رو زیاد کرد تعداد خطها به هم می ریزه. همینطور دیگه مشکلاتی داره.

دوستان کمک می کنن برای طراحی و پیاده سازی این الگوریتم؟