PDA

View Full Version : سوال: بهترین نوع کد نویسی برای افزایش سرعت برنامه چه چیزی میباشد



davidrobert
شنبه 02 تیر 1397, 16:34 عصر
سلام و خسته نباشید به دوستان برنامه نویس.
یه چند روز هستش سوالی ذهن من رو مشغول کرده بابت افزایش سرعت کدنویسی و برنامه نویسی.
بنده فیلد های مربوط به جدول و پروسجر خودم که ADO هستش رو به صورت متغییر تعریف کردم و همین طوری داده های جدولم رو داخل یک متغییر قرار میدم درست مثل Session و در همه جا استفاده میکنم به این صورت.

public static string S_Site = "";

که اطلاعات کلی که لازم دارم همه رو داخل متغییر ها ذخیره میکنم و در همه جا برنامه چون داخل این متغییر سراسری که برای هر جدول یک کلاس ایجاد کردم و تمام متغییر های که میخوام داخلش داده قرار بدم به این صورت

public static string S_Site = "";

قرار دادم ولی جدول های فیلد هایشان رو نیاز دارم و ساحتار فیلد شون یا همون نوشته رو فراموش میکنم باز به این صورت نوشته

public static string E_ID = "E_ID";

و اسم فیلد رو به این صورت صدا میزنم و استفاده میکنم

cmd.Parameters.AddWithValue(at+P_Error.E_Code, E_Code.ToString().Trim());

به صورت شی و نگران حالت نوشته اش در داخل دیتابیس نیستم میخواستم بدانم این روش برای افزایش سرعت برنامه نویسی خوب هستش یا خیر. اگه روشی سراغ دارید به بنده بگید ممنون میشم.

مهدی کرامتی
شنبه 02 تیر 1397, 19:32 عصر
من تو پروژه های ویندوز فرمز همیشه از Entity Framework استفاده می کنم. از لحاظ سرعت یک کم کندتر از ADO.NET به نظر میاد. اما برنامه نویسی رو خیلی ساده می کنه.

davidrobert
شنبه 02 تیر 1397, 21:26 عصر
سلام و خسته نباشید بنده از EF استفاده میکردم ولی بخاطر باگ های فراوان که یکی از اون باگ ها بزرگ تاریخ هستش که در دیتابیس نوع فیلد تاریخ date باشه و ویندوز، ویندوز 10 چی EF یا Linq خیلی بد به برنامه آسیب میزنه بخاطر همین پروسیژیر و کد نویسی سه لایه انجام میدم کاهش کد نویسی به شدت دارم و با یک خط کد همه کارم انجام میدم و نصف کارم روی سرور انجام میشه اگه مشکلی برخورد کنم روی سرور تغییرات اعمال میکنم و روی برنامه هم اعمال میشه

مهدی کرامتی
شنبه 02 تیر 1397, 21:32 عصر
منظورتون فیلد Date خالی هست؟

من همیشه جنس فیلدهای تاریخ رو DateTime می گیرم و مشکلی هم ندارم.

من الان یک تست در حالتی که گفتید انجام دادم. مشکلی نداشت.

این ساختار جدول بود:
148435

این داده های درون جدول:
148436
این کد برنامه:
class Program
{
static void Main(string[] args)
{
var persianCulture = new PersianCulture();
persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
persianCulture.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy";
persianCulture.DateTimeFormat.AMDesignator = "صبح";
persianCulture.DateTimeFormat.PMDesignator = "عصر";
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;


var db = new DateTestDBEntities();
/*
for (int i = 1; i <= 5; i++)
{
db.TestTable.Add(new TestTable()
{
TestDate = DateTime.Now.AddDays(i)
});
}
db.SaveChanges();
*/
var dates = db.TestTable.ToList();
foreach (var date in dates)
{
Console.WriteLine($"Date: {date.TestDate:yyyy/MM/dd}");
}
}

این خروجی کار بود:
148438
این هم کلاس PersianCulture:
148437

davidrobert
یک شنبه 03 تیر 1397, 00:47 صبح
با سلام دوباره شما این مورد رو با تبدیل تاریخ سیستم به شمسی انجام بدید متوجه منظور بنده میشد اگه تاریخ ویندوز شمسی باشه وقتی تاریخ شمسی پاس بدید به دیتابیس سیستم شمسی به میلادی تبدیل میکنه ولی اگه تاریخ میلادی بفرسته سیستم تاریخ فکر میکنه شمسی ولی چون تاریخ ویندوز 10 شمسی هستش سیستم تاریخ میلادی شمسی میدونه و 600 سال تاریخ میبره جلو اگه دستی هم شما تاریخ بدید باز به دیتابیس این اتفاق میفته ولی از function استفاده کنید و توسط فانکشن ارسال کنید تاریخ شمسی درست میلادی ارسال و ثبت میشه و تاریخ میلادی درست شمسی میشه فقط تاریخ ویندوز شمسی باید باشه حتما

مهدی کرامتی
یک شنبه 03 تیر 1397, 00:52 صبح
من این مورد رو بعضی جاها دیدم، اما همیشه این اتفاق نمیافته.

شما یک جدول مثل اونی که من ساختم در دیتابیس بساز، تاریخ سیستمت رو بگذار روی شمسی، و این برنامه (همون سورس بالایی رو ضمیمه کردم) تست کن.

بعد چک کن ببین کارت چه تفاوتهایی داشهی که باعث شده چنان اتفاقی بیافته.

davidrobert
یک شنبه 03 تیر 1397, 12:20 عصر
سلام و خسته نباشید بنده از سورس شما استفاده کردم و سعی کردم بهش دستی تاریخ شمسی بدم تا پاس بده به سرور و میلادی بشه و حالت شمسی برگردونه ولی خطا داد و خطا قبل از اجرا نوع داده نمیشناسه چون شما زدید تاریخ جاری سیستم رو بگیر و تاریخ غیر جاری سیستم دادم نگرفت ممنون میشم بگید چطور تاریخ غیر سیستم دستی بدم که روی دیتابیس بره ذخیره کنه و همون شمسی اش رو برگدونه با تشکر

مهدی کرامتی
یک شنبه 03 تیر 1397, 12:27 عصر
من این کد رو تست کردم و درست بود (تاریخ ویندوز من الان روی شمسی تنظیم شده):
var persianCulture = new PersianCulture();
persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
persianCulture.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy";
persianCulture.DateTimeFormat.AMDesignator = "صبح";
persianCulture.DateTimeFormat.PMDesignator = "عصر";
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;

var db = new DateTestDBEntities();

Console.Write("Please Enter a Persian Date: ");
string input = Console.ReadLine();
DateTime dtInput = DateTime.Parse(input);

db.TestTable.Add(new TestTable() {TestDate = dtInput});
db.SaveChanges();

var dates = db.TestTable.ToList();
foreach (var date in dates)
{
Console.WriteLine($"Date: {date.TestDate:yyyy/MM/dd}");
}