PDA

View Full Version : خطای حافظه در هنگام دریافت عکس در شبکه ...



Mahmood_M
یک شنبه 01 بهمن 1385, 18:53 عصر
سلام
من یه برنامه تقریبا مونیتورینگ نوشتم ، که عکسها به وسیله کلینت به سرور فرستاده می شن ...
توی سرور یک فرمی با یک Image برای نشون داده تصاویر قرار داره ...
مشکل اینجاست که وقتی توی سرور موقع گرفتن عکسها فرم مربوطه رو تکون می دم ، پیغام خطای حافظه نشون داده می شه ...
در هنگام تکو دادن فرم سایر فعالیتهای برنامه متوقف میشه ؟؟ ( به وسیله یک تایمر در کلینت ، هر 10 هزارم ثانیه یک عکس فرستاده می شه ) فکر کنم وقتی تکونش می دم ، برنامه نمی تونه عکسها رو بگیره ، در حالی که کلینت داره ارسال می کنه و این باعث ایجاد خطا می شه ! درسته یا اشتباه می گم ... ؟؟
چطور میشه از نمایش این پیغام جلوگیری کرد ... ؟ ( یعنی بدون مشکل دریافت بشه ) ...
با تشکر ...
منتظر جوابتون هستم ...

dkhatibi
یک شنبه 01 بهمن 1385, 20:35 عصر
شاید به این ربطی نداشته باشه!
شاید به نحوه ی نوشتن عکسها (پیکسلها)روی فرم مربوط بشه!
یک کامپوننت دیده بودم که یک کاری مشابه این رو انجام می داد .اما اسمش یادم نیست شاید بروبچ بتونن کمک کنن!

www2006
یک شنبه 01 بهمن 1385, 21:38 عصر
( به وسیله یک تایمر در کلینت ، هر 10 هزارم ثانیه یک عکس فرستاده می شه ) فکر کنم وقتی تکونش می دم ، برنامه نمی تونه عکسها رو بگیره

یعنی در هر ثانیه 10،000 تا عکس فرستاده میشه ...!!؟
من زیاد از جزییات و ریزه کاریهای IdTcpServer خبر ندارم ولی فکر نمیکنم از پس دریافت این همه عکس تو یک ثانیه بربیاد ...
( شاید هم cpu با این بار کاری زیاد تو هر ثانیه مشکل پیدا میکنه )
پیشنهاد میکنم تایمر رو روی یک ثانیه تنظیم کنید و نتیجه رو با قبلی مقایسه کنید ...

vesal
دوشنبه 02 بهمن 1385, 05:24 صبح
سلام
من یه برنامه تقریبا مونیتورینگ نوشتم ، که عکسها به وسیله کلینت به سرور فرستاده می شن ...
توی سرور یک فرمی با یک Image برای نشون داده تصاویر قرار داره ...
مشکل اینجاست که وقتی توی سرور موقع گرفتن عکسها فرم مربوطه رو تکون می دم ، پیغام خطای حافظه نشون داده می شه ...
در هنگام تکو دادن فرم سایر فعالیتهای برنامه متوقف میشه ؟؟ ( به وسیله یک تایمر در کلینت ، هر 10 هزارم ثانیه یک عکس فرستاده می شه ) فکر کنم وقتی تکونش می دم ، برنامه نمی تونه عکسها رو بگیره ، در حالی که کلینت داره ارسال می کنه و این باعث ایجاد خطا می شه ! درسته یا اشتباه می گم ... ؟؟
چطور میشه از نمایش این پیغام جلوگیری کرد ... ؟ ( یعنی بدون مشکل دریافت بشه ) ...
با تشکر ...
منتظر جوابتون هستم ...

به جای اینکه مستقیما از یه تایمر استفاده کنی از یه Thread استفاده کن. می تونه کمک کنه هر چند که الگوریتمی که میخوای ازش استفاده کنی از بیخ و بن ایراد داره. در هر حال کتاب در اعماق Indy رو هم مطالعه کن. ضرر نمی کنی

راستی این مثال رو هم یه نگاهی بنداز http://delphi.about.com/od/internetintranet/l/aa012004a.htm

Mahmood_M
دوشنبه 02 بهمن 1385, 18:49 عصر
سلام ...

یعنی در هر ثانیه 10،000 تا عکس فرستاده میشه ...!!؟
من زیاد از جزییات و ریزه کاریهای IdTcpServer خبر ندارم ولی فکر نمیکنم از پس دریافت این همه عکس تو یک ثانیه بربیاد ...
( شاید هم cpu با این بار کاری زیاد تو هر ثانیه مشکل پیدا میکنه )
پیشنهاد میکنم تایمر رو روی یک ثانیه تنظیم کنید و نتیجه رو با قبلی مقایسه کنید ...
شاید من بد گفتم ولی منظورم این بود که هر 10 هزارم ثانیه دستوری مبنی بر گرفتن عکس به Client ارسال می شه ...
روی 1 ثانیه تنظیم می کنم ، مرسی ...


به جای اینکه مستقیما از یه تایمر استفاده کنی از یه Thread استفاده کن
من دقیقا همین کار رو کردم ...


می تونه کمک کنه هر چند که الگوریتمی که میخوای ازش استفاده کنی از بیخ و بن ایراد داره.
از جوابتون ممنون ولی شما چطور الگوریتم کار من رو فهمیدید ... !!!!!!!!


راستی این مثال رو هم یه نگاهی بنداز http://delphi.about.com/od/interneti.../aa012004a.htm
برنامه من دقیقا مثل همین عمل می کنه ( یعنی منم از روی همین نوشتم ) !

فکر کنم مشکل اصلی همون زمان تایمر باشه ولی آخه اگه یک ثانیه باشه در بین عوض شدن تصاویر زمان زیادی صرف می شه ...
راه بهتری وجود نداره ... ؟
با تشکر ...

www2006
دوشنبه 02 بهمن 1385, 19:51 عصر
فکر کنم مشکل اصلی همون زمان تایمر باشه ولی آخه اگه یک ثانیه باشه در بین عوض شدن تصاویر زمان زیادی صرف می شه ...
راه بهتری وجود نداره ... ؟
با تشکر ...
من گفتم یک ثانیه را امتحان کنید و نتیجه رو با قبلی مقایسه کنید .. اگه مشکل کار همین بود تعداد عکسها را بیشتر کنید .. مثلا تو هر ثانیه 10 تا عکس ارسال بشه (یا درخواست ارسال داده بشه ) ... تعداد عکس بیشتر را هم امتحان کنید ..
خلاصه تا وقتی راه میده زیادش کن !!

vesal
دوشنبه 02 بهمن 1385, 20:12 عصر
از جوابتون ممنون ولی شما چطور الگوریتم کار من رو فهمیدید ... !!!!!!!!


با تشکر ...

از اونجایی که گفتی یه تایمر گذاشتی و هز 10 هزارم ثانیه یک عکس میفرسته!!!

مشکلات این الگوریتم

1- اگر سیستم مورد نظ 5 دقیقه بیکار باشه تو این پنج دقیقه 30.000 بار پیغام دریافت عکس صادر میشه!!! ( به Resource ها رحم کن!!! )

2- بعدش ارسال کامل عکس زیاد جالب نیست یعنی بهتره صفحه رو به قسمت های کوچکتری تقسیم کنی و قسمت هایی رو که تغییر پیدا کردن برای سرور ارسال بشه. به همین نسبت دیگه احتیاجی به Timer نیست در واقع نرم افزار Client باید محاسبات رو انجام بده و نتیجه برای سرور ارسال بشه.

Mahmood_M
دوشنبه 02 بهمن 1385, 20:28 عصر
سلام

من گفتم یک ثانیه را امتحان کنید و نتیجه رو با قبلی مقایسه کنید .. اگه مشکل کار همین بود تعداد عکسها را بیشتر کنید .. مثلا تو هر ثانیه 10 تا عکس ارسال بشه (یا درخواست ارسال داده بشه ) ... تعداد عکس بیشتر را هم امتحان کنید ..
خلاصه تا وقتی راه میده زیادش کن !!
ممنون ، حتما امتحان می کنم ...


اگر سیستم مورد نظ 5 دقیقه بیکار باشه تو این پنج دقیقه 30.000 بار پیغام دریافت عکس صادر میشه!!! ( به Resource ها رحم کن!!! )

سیستم برنامه من طوری نیست که هر موقع اتفاق خاصی افتاد ، عکس ارسال بشه ، در واقع این یه جور سیستم مونیتورینگ هستش ...
یعنی سرور باید کلینت رو ببینه ...

تا وقتی که سرور درخواست دیدن کلینت رو نکرده ، هیچ چیزی به کلینت مبنی بر ارسال عکس فرستاده نمی شه ...

خوب برنامه اصلا غیر فعال نمی مونه ، بیکار بودن برنامه مثل این می مونه که شما تلویزیون خونتون رو روشن کنید بعد برید توی اتاق و بعد از چند دقیقه بیاید ! ، خوب توی این مدت شما از تلویزیون استفاده نکردید ولی تلویزیون برنامه خودش رو نشون داده ... ( و تا وقتی که شما روشنش نکنید ، روشن نمی شه ! )


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


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

به هرحال از راهنمایی همتون ممنونم ..
با تشکر ...

vesal
دوشنبه 02 بهمن 1385, 20:34 عصر
یه پست خصوصی برات فرستادم- یه نگاهی بهش بکن