PDA

View Full Version : کند شدن زیاد سرعت با افزایش طول آرایه هنگام انتقال اطلاعات روی پورت سریال



thviser
سه شنبه 27 تیر 1391, 16:50 عصر
سلام
من یکسری داده را از نوع بایت داخل یک آرایه ذخیره میکنم و روی پورت سریال میفرستم
مشکل اینجاست که وقتی طول آرایه زیاد میشه سرعت ارسال از حد معمول خیلی کمتر مبیشه
اگر کسی میتونه راهنماییم کنه ممنون میشم.

کد ارسال:
[




for (long i = 0; i <= code1.Length - 1; i++)

{



serialPort1.Write(



newbyte[] { code1[i] }, 0, 1);

pBar.PerformStep();


{]

tooraj_azizi_1035
سه شنبه 27 تیر 1391, 16:58 عصر
سلام
شما چرا از حلقه استفاده می کنی چرا یک دفعه ارسال نمی کنی:
Write(Byte[], Int32, Int32) (http://msdn.microsoft.com/en-us/library/ms143551.aspx) Writes a specified number of bytes to the serial port using data from a buffer.

البته شما داخل حلقه از این متد استفاده کردی اما منظورم اینه که کل بایت ها در یک آرایه باشند و اون آرایه رو ارسال کنی. متوجه شدی؟ یعنی همه code1[i] ها یکی بشند.

thviser
چهارشنبه 04 مرداد 1391, 15:52 عصر
ممنون از جوابتون ولی اصلا وقتی آرایه خیلی بزرگ میشه چیزی فرستاده نمیشه کسی دلیلشو میدونه. به سایز بافر ربط داره؟اگ کسی راهنماییم کنه ممنون میشم.

fjm11100
چهارشنبه 04 مرداد 1391, 16:34 عصر
آیا گیرنده هم کد c# است یا سخت افزاریه؟(مثل میکرو) اگه c# است کدش را بزار ممکنه گیر اونجا باشه. اندازه بافر هم خیلی موثر است.

thviser
شنبه 07 مرداد 1391, 12:37 عصر
گیرنده سخت افزاریه یعنی اطلاعات برای یه میکرو فرستاده میشه که کدشو من نمینویسم

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

youngold
شنبه 07 مرداد 1391, 21:34 عصر
گیرنده سخت افزاریه یعنی اطلاعات برای یه میکرو فرستاده میشه که کدشو من نمینویسم

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

ميتونيد با توجه به حجم buffer داده هاتون رو به دسته هايي با گنجايش حجم بافرتون تقسيم كنيد
اين ساده ترين راه، اما اگر به حجم buffer دسترسي داريد به تناسب حجم كل byte ها حجم buffer رو تغيير بديد اما بازم محدوديت هست و بايد به دسته هاي كوچكتر تقسيم كنيد ، دسته هاي كوچكتري كه از لحاظ حجم ارزش تكرار حلقه رو داشته باشند اما اينكه همه byte هارو به اين شكل در حلقه تكرار كنيد باعث كند شدن عمليات ميشه و اين كندي ارتباطي به پورت سريال نداره

thviser
یک شنبه 08 مرداد 1391, 08:30 صبح
وقتی داده ها رو به دسته های کوچک تقسیم میکنم یعنی پورت سریال رو باز کنم یه دسته داده رو بفرستم بعد پورتو ببندم دوباره پورتو باز کنم دسته بعدی رو بفرستم بعد پورتو ببندم وبه همین ترتیب برای دسته های بعدی

آیا به این شکل اطلاعات درست فرستاده میشه؟

thviser
دوشنبه 09 مرداد 1391, 13:18 عصر
کسی میتونه بیشتر کمکم کنه؟وقتی داده ها را به دسته های کوچکتر تقسیم میکنم .یعنی هر دسته رو در یک مرحله بفرستم مثل اینکه چند بار دکمه sendزده بشه در هر بار یه دسته فرستاده بشه.