توسعه نرم افزار 64 بیتی به وسیله C#

MPERSIA4

Member
با درود و خسته نباشید
میخواستم بدونم برای توسعه ی نرم افزار 64 بیتی باید چکاری انجام داد؟
تنظیمات یا کد خاصی داره؟
ربطی به int64 یا int32 که در برنامه نویسی برای مقادیر ورودی و خروجی که استفاده می کنیم داره؟
اصلا میشه از int64 استفاده کنیم و برنامه 32 بیتی باشه؟
با سپاس فراوان
 

the_king

مدیرکل انجمن
با درود و خسته نباشید
میخواستم بدونم برای توسعه ی نرم افزار 64 بیتی باید چکاری انجام داد؟
تنظیمات یا کد خاصی داره؟
تنظیمی که داره اینه که باید پروژه تون رو در ویژوال استدیو باز کنید، در منوی Project ویژوال استدیو آخر لیست منو یک گزینه داره مثل ...projectName Properties که projectName اسم پروژه شما است.
اون گزینه رو انتخاب کنید. زبانه Build رو از سمت چپ پنجره انتخاب کنید. بالا پنجره یک گزینه Platform هست که کاری با اون ندارید، پایین تر یک گزینه هست به نام Platform target که
مقدار پیشفرض اش Any CPU ئه و بجز اون مقدار می تونه x86 یا x64 باشه. روی x64 قرارش بدهید. دفعه بعدی که برنامه تون Build بشه نسخه 64 بیتی اش ساخته میشه.
بعد از عوض کردن تنظیم باید برنامه مجدد کامپایل و ساخته بشه، در منوی Build گزینه Rebuild مناسب اینکار ئه.
اگه برنامه تون درگیر ارتباط با کتابخانه های خارج از برنامه نباشه همین یک گزینه برای توسعه نرم افزار 64 بیتی کفایت می کنه.

ربطی به int64 یا int32 که در برنامه نویسی برای مقادیر ورودی و خروجی که استفاده می کنیم داره؟
اگه بخواهید فرضا با یک کتابخانه DLL بیرون از برنامه تون ارتباط برقرار کنید، احتمال داره که داشته باشه، نه الزاما. در برنامه های 64 بیتی آدرس های حافظه و اشاره گر ها 64 بیتی اند، مثلا آرایه ها، رشته ها و ...
هر چیزی که به نوعی با آدرس حافظه در ارتباطه 64 بیتی میشه، وگرنه سایر مقادیر ورودی و خروجی الزاما فرقی نمی کنند، باید به مستندات اون کتابخانه ای که ازش استفاده می کنید رجوع کنید.
پس اگه یک مقدار اشاره گری رو در نرم افزار 32 بیتی درون int32 ذخیره کرده بودید ( که بهتر بود از IntPtr استفاده می کردید که مخصوص اشاره گر ها است) در نرم افزار 64 بیتی باید از Int64 استفاده کنید.
از این جهت IntPtr بهتره که در برنامه 32 بیتی خودش خودکار 32 بیتی و در برنامه 64 بیتی خودکار 64 بیتی میشه.

اصلا میشه از int64 استفاده کنیم و برنامه 32 بیتی باشه؟
با سپاس فراوان
صد البته، چون Int64 الزاما برای نرم افزار های 64 بیتی نیست و هر زمانی بخواهید از محدوده اعداد 32 بیتی خارج شوید یک گزینه تون Int64 ئه که البته اسم دیگرش long ئه. مثلا اندازه فایل رو اصولا در Int64 نگه می دارند، نه Int32 ، چون برای فایل های بزرگتر از 2 گیگابایت به مشکل بر می خوره. اگه تا حالا از System.IO.FileInfo استفاده کرده باشید می بینید که طول فایل (Length) رو با long / Int64 بر می گردونه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
صد البته، چون Int64 الزاما برای نرم افزار های 64 بیتی نیست و هر زمانی بخواهید از محدوده اعداد 32 بیتی خارج شوید یک گزینه تون Int64 ئه که البته اسم دیگرش long ئه. مثلا اندازه فایل رو اصولا در Int64 نگه می دارند، نه Int32 ، چون برای فایل های بزرگتر از 2 گیگابایت به مشکل بر می خوره. اگه تا حالا از System.IO.FileInfo استفاده کرده باشید می بینید که طول فایل (Length) رو با long / Int64 بر می گردونه.

سلام استاد علی
آها
واسه ی همینه که توی اتوپلی و لوا وقتی فایلی بزرگتر از چند صد مگ رو کلا میخواستیم بخونیم ، مشکل داشت و ارور فضای ناکافی برای رم میداد !!
فقط نمیدونم چرا مثلا 400 تا 800 مگ رو هم میخواستم کل شو بخونم هم ارور میداد (به 2 گیگ نمیرسید) . ولی تا 200 مگ رو کلا میخوند و مشکلی نداشت
 

the_king

مدیرکل انجمن
سلام استاد علی
آها
واسه ی همینه که توی اتوپلی و لوا وقتی فایلی بزرگتر از چند صد مگ رو کلا میخواستیم بخونیم ، مشکل داشت و ارور فضای ناکافی برای رم میداد !!
فقط نمیدونم چرا مثلا 400 تا 800 مگ رو هم میخواستم کل شو بخونم هم ارور میداد (به 2 گیگ نمیرسید) . ولی تا 200 مگ رو کلا میخوند و مشکلی نداشت
قطعا ربطی به محدودیت 2 گیگابایت که نداره، چون هر برنامه ای در سیستم های 32 بیتی میتونه تا 2 گیگابایت از حافظه RAM رو به خودش تخصیص بده.
اینکه حافظه آزاد کافی در سیستم در اون لحظه برای تخصیص دادن موجود نباشه یه بحث دیگه است.
خوندن کل یک فایل چند صد مگابایتی که در هیچ برنامه ای مرسوم نیست. اینجور فایل ها رو ترتیبی و تکه تکه در بافر می خوانند، نه یکجا. مخصوصا در سیستم های 32 بیتی که حافظه RAM آزادشون نمی تونه خیلی زیاد باشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
قطعا ربطی به محدودیت 2 گیگابایت که نداره، چون هر برنامه ای در سیستم های 32 بیتی میتونه تا 2 گیگابایت از حافظه RAM رو به خودش تخصیص بده.
اینکه حافظه آزاد کافی در سیستم در اون لحظه برای تخصیص دادن موجود نباشه یه بحث دیگه است.
خوندن کل یک فایل چند صد مگابایتی که در هیچ برنامه ای مرسوم نیست. اینجور فایل ها رو ترتیبی و تکه تکه در بافر می خوانند، نه یکجا. مخصوصا در سیستم های 32 بیتی که حافظه RAM آزادشون نمی تونه خیلی زیاد باشه.

آخه میخواستم فایل (باینری) رو خط به خط بخونم و مثلا هر خط (یا هر چند صد یا چند هزار خط) رو بخونم و توی یک آرایه بریزم و بعد اعضای آرایه رو ذخیره کنم ، منتها هر عضو از آرایه که شامل یک خط خونده شده از فایل میشد ، رو وقتی میخواستم همه ی اعضای آرایه رو توی یک فایل دوباره بنویسم ، مجبور بودم بعد از نوشتن هر عضو از آرایه (که یک خط بود) ، یه "n\" بزنم تا به خط بعدی بره و آماده ی نوشتن عضو بعدی بشه ؛ منتها فایل باینری ، با اضافه کردن کوچیکترین کاراکتر یا رشته (مثل همین کاراکتر "n\" ) توسط برنامه نویس ، دیگه ماهیت شو از دست میده و نمیشه از اون فایل استفاده کرد
منم دیگه راه دیگه ای هنوز نمیدونم چجوری هه
 

جدیدترین ارسال ها

بالا