PDA

View Full Version : فرق Dataset , DataTable



Sha2ow
جمعه 25 آبان 1386, 18:04 عصر
سلام
چند تا سوال ...
گشتم اما جواب بدرد بخوری پیدا نکردم

می دونم که sqldatareader سرعت خیلی بیشتری نسبت به همه object ها داره اما به خاطر اینکه برای خوندن هر رکورد connection ایجاد می کنه کاره درستی برای نمایش رکودهای زیاد نیست ....چون ممکنه بعضی اوقات Connection Timeout بده و...........
مخصوصا Cache کردن .......

به نظر شما برای نمایش اطلاعات Dataset بهتره یا DataTable
هر کدوم کجا استفاده کنیم بهتره ........

من خودم برای ثبت اطلاعات از Store Procedure استفاده می کنم و با Sqlcommand اطلاعات را ثبت می کنم فکر کنم این روش از نظره سرعتی از همه بهتره اما برای نمایش اطلاعات و پر کردن Grid کدوم بهتره Dataset یا Datatable
نظر خودم DataTable هست .....

hamedgh
جمعه 25 آبان 1386, 19:46 عصر
نظر خودت عالی است
dataset را وقتی استفاده می کنیم که بخواهیم یک شمایی از دیتا بیس درست کنیم
با حد اقل جند تا تیبل ......
ولی برای پر کردن یک گرید استفاه از دیتا تیبل بهترین گزینه است

el_abdollahi
جمعه 25 آبان 1386, 21:13 عصر
دیتا تیبل زیر مجموعه ای از دیتاست هست و مسلما فضای کمتر و سرعت بیشتری نسبت به دیتاست داره. من هم نظرم دیتاتیبله .

someCoder
شنبه 26 آبان 1386, 16:24 عصر
این لینک رو من قبلا هم داده بودم، اما به درد تو هم خیلی میخوره. حتما کامل بخونش:
Why I Don't Use DataSets in My ASP.NET Applications (http://aspnet.4guysfromrolla.com/articles/050405-1.aspx)

و در ادامه:
More On Why I Don't Use DataSets in My ASP.NET Applications (http://aspnet.4guysfromrolla.com/articles/051805-1.aspx)

اگر هم حوصله خوندن نداری، به طور خلاصه مطلب این نموداره:
http://aspnet.4guysfromrolla.com/images/drvds.gif
خط صورتی: استفاده از DataSet
خط آبی: استفاده از DataReader

Sha2ow
شنبه 26 آبان 1386, 23:09 عصر
سلام
ممنون اینو خوندم خیلی کمک کرد
اما سوال پرسیدم چون زیاد دیدم بعضی ها برای انتقال Data بین کلاس ها از Dataset استفاده کردن در صورتی که اصلا احتیاج به Dataset نبوده یه جدول بوده و به راحتی با Datatable می شد اینکارو کرد ...

دوستان چیزای دیگه ای که تو کار با Database سرعت میاره پایین بیان کنند ممنون می شم

mahdi_negahi
شنبه 26 آبان 1386, 23:33 عصر
با احترام فراوان
مقاله ای که گذاشنی مال asp.net 1 است،در 2 microsoft روی performance ،دیتا ست خیلی کار کرده و تا حدودی موفق بوده
ولی datareader یک چیزه دیگس

Behrouz_Rad
یک شنبه 27 آبان 1386, 18:57 عصر
اما سوال پرسیدم چون زیاد دیدم بعضی ها برای انتقال Data بین کلاس ها از Dataset استفاده کردن در صورتی که اصلا احتیاج به Dataset نبوده یه جدول بوده و به راحتی با Datatable می شد اینکارو کرد ...
درست دیدی!
این نوع استفاده از Dataset در معماری چند لایه بیشترین کاربرد رو داره.
چون مدیریت Connection ها و آبجکت ها در این حالت برای برنامه نویس بسیار راحت تر هست.
ضمن اینکه توجه داشته باشید که عدم استفاده از Dataset برای زمانی هست که رکوردهای زیادی رو واکشی می کنید وگرنه با تعداد رکوردهای کم (حدود 100 رکورد) مشکلی به وجود نمیاد.

موفق باشید.

someCoder
یک شنبه 27 آبان 1386, 19:11 عصر
سلام
ممنون اینو خوندم خیلی کمک کرد
اما سوال پرسیدم چون زیاد دیدم بعضی ها برای انتقال Data بین کلاس ها از Dataset استفاده کردن در صورتی که اصلا احتیاج به Dataset نبوده یه جدول بوده و به راحتی با Datatable می شد اینکارو کرد ...

دوستان چیزای دیگه ای که تو کار با Database سرعت میاره پایین بیان کنند ممنون می شم



اشتباه میکردن! :چشمک:


با احترام فراوان
مقاله ای که گذاشنی مال asp.net 1 است،در 2 microsoft روی performance ،دیتا ست خیلی کار کرده و تا حدودی موفق بوده
ولی datareader یک چیزه دیگس

برای ADO.NET 2 مقایسه پیدا نکردم. به طور کلی گفته میشه (http://msdn.microsoft.com/msdnmag/issues/05/11/DataPoints/default.aspx) که بهتر شده از قبل. اما بازم به قول خودت، dataReader یه چیز دیگه است.

someCoder
یک شنبه 27 آبان 1386, 19:19 عصر
درست دیدی!
این نوع استفاده از Dataset در معماری چند لایه بیشترین کاربرد رو داره.
چون مدیریت Connection ها و آبجکت ها در این حالت برای برنامه نویس بسیار راحت تر هست.
ضمن اینکه توجه داشته باشید که عدم استفاده از Dataset برای زمانی هست که رکوردهای زیادی رو واکشی می کنید وگرنه با تعداد رکوردهای کم (حدود 100 رکورد) مشکلی به وجود نمیاد.

موفق باشید.

برای این حالت هم بهتره که از یه کلاس به عنوان container در انتقال بین لایه ها استفاده کرد و در نهایت هم یک ArrayList از این کلاس رو ارسال کرد.
مدیریت Connection هم به این صورت دیگه پیچیگی خاصی نداره.

Behrouz_Rad
یک شنبه 27 آبان 1386, 21:14 عصر
برای این حالت هم بهتره که از یه کلاس به عنوان container در انتقال بین لایه ها استفاده کرد و در نهایت هم یک ArrayList از این کلاس رو ارسال کرد.

بحث بر سر استفاده از کلاس نیست چون طبیعتا در معماری چند لایه با کدنویسی از کلاس استفاده میشه.
ArrayList هم استفاده میشه اما تفاوتی از نظر مصرف حافظه که بحث اصلی هست با Dataset نداره.


مدیریت Connection هم به این صورت دیگه پیچیگی خاصی نداره.

اگر منظورت حالتی هست که در پست قبلی گفتم درسته.

موفق باشید.

someCoder
یک شنبه 27 آبان 1386, 21:29 عصر
بحث بر سر استفاده از کلاس نیست چون طبیعتا در معماری چند لایه با کدنویسی از کلاس استفاده میشه.منظورم کلاس مخصوص نگهداری داده ها بود و ممکنه همون کلاسهای موجود در برنامه نباشن و فقط برای تبادل داده استفاده بشن.

ArrayList هم استفاده میشه اما تفاوتی از نظر مصرف حافظه که بحث اصلی هست با Dataset نداره.
تفاوت از چند جنبه مهم داره.
یکی اینکه سرعت کار بیشتر میشه. (در مورد داده کم، قبول دارم که فرق زیادی نداره)
یکی دیگه اینکه مصرف حافظه هم کم میشه. (باز هم در مورد داده کم، فرق زیادی نداره)
یکی دیگه اینه که مخصوصا اگر بخوای بین لایه ها با Web Service ارتباط برقرار کنی، خروجی XML تولید شده در حالتی که از Dataset استفاده میشه، روش کنترل خاصی نداری و مهمترین نکته هم باز این که این XML ها فقط توسط خود NET. راحت Deserialize میشن و اگر کسی بخواد از خروجی این وب سرویس بدون NET. استفاده کنه، بدبختی زیاد داره.

اگر منظورت حالتی هست که در پست قبلی گفتم درسته.نه، منظورم همون حالتی بود که یه سری کلاس مخصوص انتقال داده بین لایه ها ایجاد بشه و یک ArrayList حاوی اونها ارسال بشه.
میدونم کد بیشتری باید نوشته بشه، اما پیچیدگی بیشتری نمیبینم. فقط یک سری کلاس جدید ممکنه تعریف بشه و در لایه Data Access اون ArrayList ها پر میشن.

Sha2ow
یک شنبه 27 آبان 1386, 21:52 عصر
با تشکر از دوستان
حالا به غیر از جریان تعداد رکوردها در سایت هایی که بازید زیاد دارند و با Database زیاد کار می کنند صرف نظر از تعداد رکورد استفاده از Array List یا Datatable خیلی بهتره .....

Behrouz_Rad
دوشنبه 28 آبان 1386, 08:57 صبح
اگر بخوای بین لایه ها با Web Service ارتباط برقرار کنی، خروجی XML تولید شده در حالتی که از Dataset استفاده میشه، روش کنترل خاصی نداری و مهمترین نکته هم باز این که این XML ها فقط توسط خود NET. راحت Deserialize میشن و اگر کسی بخواد از خروجی این وب سرویس بدون NET. استفاده کنه، بدبختی زیاد داره.

بالعکس گفتی!
اتفاقا یکی از خصوصیات Dataset این هست که XML رو به راحتی Serialized و Deserialized می کنه و به همین دلیل برای انتقال اطلاعات بین پلت فرم های مختلف یکی از بهترین گزینه هاست...