View Full Version : سوال: کند شدن موقع بازبابی اطلاعات
rafiei939
دوشنبه 16 آذر 1388, 12:40 عصر
با سلام
فایل اس کیو ال دارم که در آن اسکن نامه ها را دخیره می کنم
وقتی می خواهم پروژه دلفی را اجرا کنم ابتدای کار بسیار بسیار کند است . چرا و چکار کنم سرعتش بیشتر شود؟ تشکر
vcldeveloper
دوشنبه 16 آذر 1388, 12:47 عصر
سلام،
احتمالا به خاطر این هست که در زمان شروع برنامه کل داده های جداول را از سرور به کلاینت منتقل می کنید. باید اولا فقط زمانی جداول را باز کنید که به آنها نیاز دارید، و ثانیا فقط داده هایی را از بانک دریافت کنید که به آنها نیاز دارید، نه همه داده ها را؛ فرضا اگر شما یک گرید دارید که موضوع نامه، تاریخ نامه، نام ارسال کننده، و اطلاعاتی از این قبیل را به کاربر نمایش میده، و با دابل کلیک کردن بر روی هر سطر، تصویر اصلی نامه را به کاربر نمایش میده، بجای اینکه کل داده های جدول را در حافظه لود کنید، باید با یک کوئری فقط فیلدهای مربوط به موضوع نامه، تاریخ نامه، نام نویسنده، و امثالهم را که حجم زیادی هم ندارند از بانک دریافت کنید، و هر زمان کاربر نامه ایی را برای باز شدن انتخاب کرد، با یک کوئری مجزا، اطلاعات مربوط به تصویر نامه اصلی را از بانک دریافت کنید. یا اگر جدول شما 100 هزار رکورد دارد، نیازی نیست که هر 100 هزار رکورد را از بانک دریافت کنید، بلکه می تونید مثلا هر 100 رکورد را به کاربر نمایش بدید، و مابقی رکوردها را با قرار دادن دکمه هایی برای صفحه بعدی و قبلی نمایش بدید.
درباره این موضوع در این سایت زیاد بحث شده، می تونید به تاپیک های قبلی با همین مضمون برای توضیحات بیشتر مراجعه کنید.
hadisalahi2
دوشنبه 16 آذر 1388, 17:09 عصر
فایل اس کیو ال دارم که در آن اسکن نامه ها را دخیره می کنم
اکیدا به شما توصیه میکنم که این کار رو نکنید.
من هم مثل شما برنامه ای نوشتم که حدود 12000 عکس پل رو قرار بود در بانک اطلاعاتی ذخیره کنه.
بعد از وارد شدن 3000 عکس دیگه سرعت وحشتناک پایین رفت.
از چند تا جدول هم استفاده کردم، ولی بازهم سرعت آنقدر تفاوت نکرد، چون در کل Select عکس یا فایل های با حجم بالا در بانک اطلاعاتی بسیار کند صورت میگیره.
پیشنهادمن ذخیره تصاویر بر روی هارد دیسکه به جای بانک اطلاعاتی.
یا حق
vcldeveloper
دوشنبه 16 آذر 1388, 23:30 عصر
از چند تا جدول هم استفاده کردم، ولی بازهم سرعت آنقدر تفاوت نکرد، چون در کل Select عکس یا فایل های با حجم بالا در بانک اطلاعاتی بسیار کند صورت میگیره.
احتمالا شما در طراحی ساختار بانک تان مشکل داشتید. داده های باینری حجیم در SQL Server جدای از سایر داده های جدول نگهداری میشند تا تاثیر منفی بر روی سایر فیلدها نداشته باشند.
hadisalahi2
سه شنبه 17 آذر 1388, 08:50 صبح
احتمالا شما در طراحی ساختار بانک تان مشکل داشتید. داده های باینری حجیم در SQL Server جدای از سایر داده های جدول نگهداری میشند تا تاثیر منفی بر روی سایر فیلدها نداشته باشند.
من هم همین روش رو استفاده کردم و عکس ها رو در جدول جداگانه ای نگهداری کردم. ولی بدلیل اینکه مواقعی لازم می شد تا در جستجو ها چندین رکورد بازیابی بشه، باز هم در این موارد سرعت پایین می اومد.
البته در هنگامی که اطلاعات عکس نیاز نبود که سرعت بسیار خوب و بالا بود ولی هنگام Select کردن تصاویر باز هم سرعت کند بود. البته نه به اون صورتی که در اول بود . ولی به نظر من در زمانی که عکسها در روی دیسک نگهداری میشوند، پشتیبان گیری راحت تره و حجم بانک اطلاعاتی هم به مراتب سبک تره.
یا علی
حسین شهریاری
سه شنبه 17 آذر 1388, 09:21 صبح
سلام
من یه روشی برای ذخیره و بازیابی تصاویر دارم اینطوری که:
یه پوشه کنار فایل اجرایی دارم و تمام تصاویرم را توی اون میریزم و توی جدولم یه فیلد از نوع nvarchar تعریف میکنم و فقط نام فایل تصویر را توی بانکم ذخیره میکنم.
Adotable.FieldByName('Path').asstring:=ExtractFile Name(OpenpictureDialog1.FileName)
برای بازیابی هم اینطوری عمل میکنم و کد زیر را در DatasetChange مینویسم:
Image1.picture.loadfromfile(ExtractFilePath(Applic ation.ExeName)+'Picture\'+Adotable.FieldByName('Pa th').asstring)
البته دستورات کنترلی را ننوشتم.یعنی با این کار فقط نام فایل بصورت رشته ای ذخیره میشه(حتی بدون هیچ مسیر ثابتی)برای بازیابی هم از یه Image معمولی استفاده میشه و مسیر تصویر اون به شکل داینامیک بدست میاد.
من خودم بارها در برنامه هایی که نوشتم از این روش استفاده کردم و مشکلی هم نداشتم.
البته این فقط یه توصیه است.شک هم نیست که روشهای بهتری هم هست و فقط مقصودم کند نشدن و حجیم نشدن پایگاه داده با ذخیره تصاویر است.
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.