PDA

View Full Version : تفاوت خواندن یک فایل XML با دیگر فایلها



shahab_ksh
جمعه 16 فروردین 1387, 14:25 عصر
برای ذخیره بعضی از تنظیمات میشه اون تنظیمات رو در یک فایل ذخیره کرد (file.ini) و بعد از اون خوند

ولی بهتره این تنظبمات رو در یک فایل xml قرار داد و خوند یا در یک فایل متن از نظر فنی چه تفاوتی با هم دارن و کدوم بهتره؟

آیا ممکنه در تعداد درخواست از خواندن فایل محدودیت داشته باشن؟

Behrouz_Rad
جمعه 16 فروردین 1387, 14:59 عصر
دلیل وجود ساختار XML، قبول اون به عنوان یک استاندارد توسط اکثر پلت فرم ها برای انتقال داده بین اونهاست.
ضمن اینکه کلاس هایی که برای کار با ساختار XML در دات نت وجود داره، دسترسی به یک Node و انجام عمل مقتضی بر روی اون رو راحت می کنه.
فرضا اگر قصد داشته باشی همون تنظیم رو در یک فایل ساده ی متنی ذخیره کنی، نیاز داری تا الگوریتم و روشی رو برای دسترسی به اون مقدار پیاده سازی کنی. در صورتی که XML با ساختار Name-Value ای که داره به راحتی امکان دسترسی به Node مورد نظر و مقدار اون رو (مثلا با XPath) فراهم می کنه.
XML به راحتی Serialize و Deserialize میشه. تعامل بسیار خوبی با SQL Server داره، و بسیاری از مزایای دیگه...

فایل های ini به واسطه ی API های GetPrivateProfileString و WritePrivateProfileString که در ویندوز وجود داره در Win Apps استفاده میشه و تقریبا دیگه منسوخ شده.

موفق باشید.

shahab_ksh
جمعه 16 فروردین 1387, 18:08 عصر
ممنون جناب راد برای ذخیره نام مستر پیج سایت از فایل متنی استفاده کردم

حال به نظر شما بهتره این نام رو در یک xml فایل بزارم یا همین فایل متنی و خوندن اون کفایت میکنه

یا شاید بهتر باشه اینطوری بگم اگه بازدید کننده من بالا بره و درخواست برای خواندن این فایل متنی بالا بره آیا مشکلی پیش میاد؟ از نظر سرعت چی؟

Behrouz_Rad
جمعه 16 فروردین 1387, 18:28 عصر
XmlTextReader حالت Thread Safe داره. برای خواندن مشکلی نیست.

Behrouz_Rad
جمعه 16 فروردین 1387, 19:12 عصر
در مورد کاری که قصد داری انجام بدی هم توضیحی بدم:
هیچ وقت به این شکل عمل نمیشه که برای ذخیره ی تنظیماتی از سایت از یک فایل XML که به صورت "مجزا" با کلاس های دات نت با اون کار کنی استفاده بشه.
هر چه که هست و هر آنچه که نیاز هست در Web.Config ذخیره میشه.
از اونجایی که این تنظیمات ممکنه گاهی اوقات زیاد بشن، اونها رو در فایل های مجزا قرار میدن و در Web.Config فراخوانی می کنن.
در ASP.NET 1.x، تگ appSettings خاصیتی با نام file داشت که میشد تنظیمات مختلف رو در یک فایل config ذخیره و از طریق این خاصیت، فایل رو در پروژه وارد کرد و با ConfigurationSettings اون رو خوند.
خاصیت file چند تا محدودیت داشت که گفتنشون از حوصله خارج هست.
خوشبختانه در دات نت 2.0 این محدودیت ها با معرفی خاصیت configSource برطرف شد + اجازه ی ایجاد سکشن های سفارشی با معرفی کلاس ConfigurationSection فراهم شد.

به زودی مقاله ای در مورد این قابلیت جدید ارائه میدم.

موفق باشید.

shahab_ksh
جمعه 16 فروردین 1387, 19:32 عصر
ممنون از توضیحتون جناب راد

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


منتظر مقالات جالب شما هستیم

Behrouz_Rad
جمعه 16 فروردین 1387, 23:05 عصر
در این مورد خاص من چون اون فایل که محل نام فایل مستر پیج هست آپدیت میشد
منطقی به نظر نمی رسید اون در Web.Config بزارم هر بار آپدیتش کنم

اتفاقا دقیقا منطقیه!
همون طور که احتمالا می دونی هرگونه تغییری در محتویات Web.Config باعث Restart شدن AppDomain میشه.
خوشبختانه برای موردی که گفتی، ASP.NET راه حل خوبی رو ارائه کرده.
بدین ترتیب که وقتی تنظیمات مورد نظرت رو در یک فایل config قرار دادی و با configSource به Web.Config معرفیش کردی، می تونی خاصیت restartOnExternalChanges سکشن رو برابر با false قرار بدی تا هرگونه تغییر در فایل config از Restart شدن AppDomain جلوگیری کنه!
این هم یکی از قابلیت های جدید در ASP.NET 2.0 هست که فایل های config به کمک FileSystemWatcher مانیتور میشن اما فایل هایی که با خاصیت file معرفی میشن قابلیت مانیتور شدن ندارند.

موفق باشید

shahab_ksh
جمعه 16 فروردین 1387, 23:16 عصر
ممنون راه حل خیلی خوبی از این استفاده میکنم


به چیز جالبی اشاره کردید.


همون طور که احتمالا می دونی هرگونه تغییری در محتویات Web.Config باعث Restart شدن AppDomain میشه.


هر گونه تغییر در دایرکتوری bin هم مثل (تغییر نام و یا کپی کردن فایل ...) در این دایرکتوری باعث میشه شسن ها و انگار AppDomain ریسیت میشه آیا راهی برای جلوگیری از این موضوع برای این دایرکتوری هست؟

Behrouz_Rad
شنبه 17 فروردین 1387, 00:12 صبح
من راهی ندیدم.