PDA

View Full Version : آموزش: وقت شما ارزش دارد.



mm2100
دوشنبه 26 دی 1390, 19:46 عصر
DataReader مشکلات فراوانی دارد و استفاده از آن هم مشکل است اما مزایایی دارد که استفاده از آن را در برخی موارد لازم جاوه می دهد. ولی استفاده از آن تنها در موارد خاصی توصیه می شود و شما می توانید در اغلب موارد از Dataset یا DataTable استفاده کنید و نیازی به استفاده از DataReader نیست.
در برخی موارد نداشتن درک صحیح از DataReader و تصور اینکه سریعتر است ممکن است شما را به اشتباه بیاندازد و شما با این تصور که سریعتر است از DateReader استفاده کنید ولی در نهایت کد شما کندتر و با گرفتن حافظه بیشتر اجرا شود. ولی با کمی دقت به آنچه می‏خواهید، یعنی سرعت بیشتر و مصرف حافظه کمتر خواهید رسید.
زمانی از DataReader استفاده کنید که


می خواهید از اطلاعاتی استفاده کنید بسیار به روز باشد و میزان تغییرات در آن بسیار زیاد است. یعنی شما داده هایی دارید که مرتب به روز می شوند و تغییر می کنند و در فاصله پیمایش از یک رکورد به بعدی هم شاید رکوردهای پایین تر تغییر کنند. برای مثال می‏خواهید 3 خبر آخر را در یک خبرگزاری داشته باشید. در این موارد از DataReader استفاده کنید چون هم بار کمتری دارد هم سریعتر است.
وقتی شما یک حرکت رو به جلو در خواندن رکوردها دارید. مانند وقتی که با XML کار می کنید.
وقتی شما تنها می‏خواهید یک ردیف را بخوانید. (یا حتی یک فیلد)

از معایب DataSet این است که ممکن است حجم زیادی از حافظه را در هنگام Select کردن اطلاعات بگیرید و این کارآیی را پایین می آورد. ولی هنگامی که شما تنها 100 یا 200 رکورد دارید واقعا دلیلی برای استفاده از DataReader وجود ندارد. چون این تعداد رکورد حجمی در حافظه نخواهد گرفت. پس وسواس به خرج نداده و کد خود را با ifهای فراوان (برای چک کردن Null بودن) و توابع مختلف برای انواع مختلف داده پیچیده نکنید.
در ضمن بارها و بارها اتفاق افتاده که چک کردن Null بودن فراموش می‏شود که واقعا مشکل بدی است به زحمت خواهید افتاد و همین مسأله ممکن است ساعتی از وقت گرانبهای شما را بگیرد. در ضمن تا ندانید که نوع داده شما چیست نمی توانید اطلاعات درستی را از طریقDataReader بخوانید (که این مورد بسیار عجیب به نظر می رسد) و باید کد متفاوتی برای هر فیلد بنویسید.
به هر حال تشخیص این که از کدام استفاده کنید بسیار ساده است، فقط کافی است به سرعت لازمه و میزان اطلاعات درخواست شده فکر کنید.
منبع

mm2100
دوشنبه 26 دی 1390, 19:57 عصر
DataReader مشکلات فراوانی دارد و استفاده از آن هم مشکل است اما مزایایی دارد که استفاده از آن را در برخی موارد لازم جاوه می دهد. ولی استفاده از آن تنها در موارد خاصی توصیه می شود و شما می توانید در اغلب موارد از Dataset یا DataTable استفاده کنید و نیازی به استفاده از DataReader نیست.
در برخی موارد نداشتن درک صحیح از DataReader و تصور اینکه سریعتر است ممکن است شما را به اشتباه بیاندازد و شما با این تصور که سریعتر است از DateReader استفاده کنید ولی در نهایت کد شما کندتر و با گرفتن حافظه بیشتر اجرا شود. ولی با کمی دقت به آنچه می‏خواهید، یعنی سرعت بیشتر و مصرف حافظه کمتر خواهید رسید.
زمانی از DataReader استفاده کنید که


می خواهید از اطلاعاتی استفاده کنید بسیار به روز باشد و میزان تغییرات در آن بسیار زیاد است. یعنی شما داده هایی دارید که مرتب به روز می شوند و تغییر می کنند و در فاصله پیمایش از یک رکورد به بعدی هم شاید رکوردهای پایین تر تغییر کنند. برای مثال می‏خواهید 3 خبر آخر را در یک خبرگزاری داشته باشید. در این موارد از DataReader استفاده کنید چون هم بار کمتری دارد هم سریعتر است.
وقتی شما یک حرکت رو به جلو در خواندن رکوردها دارید. مانند وقتی که با XML کار می کنید.
وقتی شما تنها می‏خواهید یک ردیف را بخوانید. (یا حتی یک فیلد)

از معایب DataSet این است که ممکن است حجم زیادی از حافظه را در هنگام Select کردن اطلاعات بگیرید و این کارآیی را پایین می آورد. ولی هنگامی که شما تنها 100 یا 200 رکورد دارید واقعا دلیلی برای استفاده از DataReader وجود ندارد. چون این تعداد رکورد حجمی در حافظه نخواهد گرفت. پس وسواس به خرج نداده و کد خود را با ifهای فراوان (برای چک کردن Null بودن) و توابع مختلف برای انواع مختلف داده پیچیده نکنید.
در ضمن بارها و بارها اتفاق افتاده که چک کردن Null بودن فراموش می‏شود که واقعا مشکل بدی است به زحمت خواهید افتاد و همین مسأله ممکن است ساعتی از وقت گرانبهای شما را بگیرد. در ضمن تا ندانید که نوع داده شما چیست نمی توانید اطلاعات درستی را از طریقDataReader بخوانید (که این مورد بسیار عجیب به نظر می رسد) و باید کد متفاوتی برای هر فیلد بنویسید.
به هر حال تشخیص این که از کدام استفاده کنید بسیار ساده است، فقط کافی است به سرعت لازمه و میزان اطلاعات درخواست شده فکر کنید.
منبع (http://weblog.radcom.ir/amir/archive/2005/05/04/265.aspx)

mmnoody2006
دوشنبه 26 دی 1390, 20:36 عصر
برادر شما خودت گرفتی چی گفتی ؟ :گیج:

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



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

فقط اینو واسم توضیح بده :قهقهه:

mahan.2002
دوشنبه 26 دی 1390, 21:23 عصر
برادر شما خودت گرفتی چی گفتی ؟ :گیج:

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




فقط اینو واسم توضیح بده :قهقهه:

برادر

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

mahan.2002
سه شنبه 27 دی 1390, 00:26 صبح
دوستان اگر نظری در موارد استفاده از Data set و Data Reader دارند و ضروت استفاده از Data Reader و تجربیات تون در این رابطه برای بحرمندی دوستان داشته باشیم .

ممنون از دوستان که برای پیشرفت دیگران علم و دانش خوشون رو ارائه میکنند.

alonemm
سه شنبه 27 دی 1390, 11:49 صبح
باسلام:
به نظر من اولا که واکشی داده ها و رکوردهای زیاد بهینه نیست و باید از پیجینگ داده ها استفاده بشه.
بعد استفاده از Data Reader در واکشی رکوردهای پایین از نظر سرعت خوبه اما مشکل اینجاست که نمیشه به عنوان یک Data Source ازش استفاده کرد.
برای حل این مشکل و سرعت بالا و داشتن یک Data Source بهتره:

واکشی داده به صورت پیجینگ + خواندن رکورد ها به وسیله Data Reader + و لود کردن Data Reder در یک Data Table و استفاده از این شی به عنوان یک Data Source.



از کدنویسی لذت ببرید.

mmnoody2006
سه شنبه 27 دی 1390, 14:12 عصر
ولی فکر کنم تازه کلاس زبان داری میری !..
برادر ترم چندی !...

برادر من تازه دوم دبستانم دارم می رم :قلب: اینقد خوبه که نگو :خجالت: دلت آب :بوس:

mmnoody2006
سه شنبه 27 دی 1390, 14:29 عصر
از معایب DataSet این است که ممکن است حجم زیادی از حافظه را در هنگام Select کردن اطلاعات بگیرید

برادر شما وقتی درست در سمت دیتابیس کوئری بنویسی این مشکل پیش نمیاد



این تصور که سریعتر است از DateReader استفاده کنید ولی در نهایت کد شما کندتر و با گرفتن حافظه بیشتر اجرا شود

شما خودت قضاوت کن چطور مردم گیج نشن آخه


80985

در عکس بالا شما می تونی یک مقایسه بین dataset خط صورتی و datareader خط سیاه رو ببینی که در دریافت اطلاعات نشون داده شده تعداد رکورد درخواستی 1000 رکورد هست که در این آزمایش dataset سی برابر کندتر عمل کرده برای دیتاست 8.89 ثانیه و دیتاریدر 0.29 ثانیه که خیلی جالبه :گیج:

mmnoody2006
سه شنبه 27 دی 1390, 14:36 عصر
دوست عزیز فقط دوست نداشتم بیخود دوستان دیگه گیج بشن مخصوصا اونایی که تازه واردن ولی
همه چیز بستگی به نوع استفاده شما داره من بهت پیشنهاد می کنم حتما مقاله زیر رو بخونی تا
نظرت عوض شه :

http://msdn.microsoft.com/en-us/library/ms978388

در کل معذرت می خوام که باهات شوخی کردم :بوس:

alonemm
سه شنبه 27 دی 1390, 14:49 عصر
دوستان سعی کنید مجادله ها رو از طریق پیام خصوص پیگیری کنید.!

در رابطه با سرعت و نحوه بهینه استفاده هم در پست قبلیم توضیح دادم.
موفق باشید.

A.Yousefi
سه شنبه 27 دی 1390, 18:48 عصر
DataReader در ضمن تا ندانید که نوع داده شما چیست نمی توانید اطلاعات درستی را از طریقDataReader بخوانید (که این مورد بسیار عجیب به نظر می رسد) و باید کد متفاوتی برای هر فیلد بنویسید.
به هر حال تشخیص این که از کدام استفاده کنید بسیار ساده است، فقط کافی است به سرعت لازمه و میزان اطلاعات درخواست شده فکر کنید.
منبع

یعنی چی تا ندونید نوع دادتون چیه نمیشه با DR اونو خوند؟

A.Yousefi
سه شنبه 27 دی 1390, 18:55 عصر
[INDENT] [FONT=Tahoma][COLOR=#0000ff]DataReader [FONT=Tahoma]از معایب [COLOR=#0000ff]DataSet این است که ممکن است حجم زیادی از حافظه را در هنگام Select کردن اطلاعات بگیرید و این کارآیی را پایین می آورد. ولی هنگامی که شما تنها 100 یا 200 رکورد دارید واقعا دلیلی برای استفاده از DataReader وجود ندارد. چون این تعداد رکورد حجمی در حافظه نخواهد گرفت. پس وسواس به خرج نداده و کد خود را با ifهای فراوان (برای چک کردن Null بودن) و توابع مختلف برای انواع مختلف داده پیچیده نکنید.

منظورتون دلیلی برای استفاده نکردن از DR بود؟
چون اگه میگین 200 تا رکورد حجم زیادی نمیگیره پس باید از DR استفاده کرد.
من اصلا یه سوال دارم چرا نباید از DataSet استفاده کنیم؟
منظورم اینه که همیشه اگه از DataSet استفاده کنیم مگه مشکلی پیش میاد؟
با توجه به اینکه DR به صورت متصل با دیتابیس ارتباط برقرار میکنه و همزمان امکان استفاده از چنتا DR فعال نیست. اصلا DR مربوط به ADO کلاسیک میشه نه الان که ADO.NET وجود داره.

mmnoody2006
سه شنبه 27 دی 1390, 19:15 عصر
من اصلا یه سوال دارم چرا نباید از DataSet استفاده کنیم؟

دوست عزیز دیدی واسه مردم 1000 تا سوال پیش آوردی . نه دوستان کلا در 80% موارد شاید مجبور به استفاده باشید
ولی با استفاده بهینه از کوئری های sql و برنامه نویسی بهینه حتی در بعضی مواقع عملکرد بهتریی هم داره

A.Yousefi
سه شنبه 27 دی 1390, 19:26 عصر
دوست عزیز دیدی واسه مردم 1000 تا سوال پیش آوردی . نه دوستان کلا در 80% موارد شاید مجبور به استفاده باشید
ولی با استفاده بهینه از کوئری های sql و برنامه نویسی بهینه حتی در بعضی مواقع عملکرد بهتریی هم داره
یعنی چی مجبور به استفاده باشیم؟
چرا باید مجبور باشیم؟
یعنی جایی هست که DataSet جوابگو نیست ؟

mmnoody2006
سه شنبه 27 دی 1390, 21:39 عصر
یعنی جایی هست که DataSet جوابگو نیست ؟

برعکس جایی هست که باید از دیتاست استفاده کرد

A.Yousefi
سه شنبه 27 دی 1390, 22:06 عصر
برعکس جایی هست که باید از دیتاست استفاده کرد

ای خدا!
منظور من از اون جمله این بود که جایی هست که نشه از DataSet استفاده کرد و حتما باید از DR استفاده بشه یعنی که DataSet جوابگو نباشه اونجا.
اصلا آیا با وجود DS الان لزومی به استفاده از DR همچنان وجود داره؟