PDA

View Full Version : ذخیره در فایل ini با سرعت زیاد



seyed_farid
چهارشنبه 24 دی 1399, 19:37 عصر
با سلام
من میخواهم لاگ اتفاقات برنامه رو در فایل ini ذخیره کنم. این ذخیره از چندین مرجع و با توجه به اتفاقاتی که در برنامه میافتد باید لاگ شود.
من با دستورات نوشتن در iniFile این کار را میکنم ولی وقتی همزمان چند اتفاق میافتد برخی از آنها در لاگ ثبت نمیشود.
دوستان کسی میتونه تو این زمینه راهنمایی کنه؟

Mask
پنج شنبه 25 دی 1399, 00:14 صبح
با سلام
من میخواهم لاگ اتفاقات برنامه رو در فایل ini ذخیره کنم. این ذخیره از چندین مرجع و با توجه به اتفاقاتی که در برنامه میافتد باید لاگ شود.
من با دستورات نوشتن در iniFile این کار را میکنم ولی وقتی همزمان چند اتفاق میافتد برخی از آنها در لاگ ثبت نمیشود.
دوستان کسی میتونه تو این زمینه راهنمایی کنه؟
اگر روش استاندارد رو استفاده کنید محاله ممکنه ثبت نشه.
کد ثبتتون رو قرار بدید.
بعدم میفرمایید از چند قسمت دارید لاگ رو ثبت میکنین.بیشتر توضیح بدید.یعنی چی از چند قسمت؟منظورتون اینه بصورت مالتی ترد دارید سیو میکنین؟
از چند جای برنامه دارید سیو میکنین؟
و در ضمن 2 راه دیگه هم دارید.
1-پیامهارو در یک لیست بریزید وقتی به تعدادی رسید در فایل ثبت کنید.
2- ثبت پیامهاتون رو توسط مسیجینگ انجام بدید تا خود ویندوز براتون صف بندی کنه.

seyed_farid
پنج شنبه 25 دی 1399, 23:54 عصر
سلام.
ممنون از پاسختون

Procedure Log(s: String);
begin
with TIniFile.Create(ExtractFilePath(Application.ExeNam e)+'\fsmLog.log') do
begin
WriteString(FormatDateTime('YYYY-MM-DD', GetUTC), FormatDateTime('HH:nn:ss', GetUTC), s );
Free;
end;

end;

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

راه دوم رو میشه بیشتر توضیح بفرمائید؟
ممنون از لطفتون

یوسف زالی
یک شنبه 28 دی 1399, 16:21 عصر
با اجازه مدیر عزیز،

اگر شما دارید با استفاده از چندین ترد در فایل رایت می کنید، و رایت کردن در خود ترد ها داره انجام می شه، باید بدونید که فایل برای این سیستم مناسب نیست.
اگر ترد ها دارن روی ترد اصلی رایت رو انجام میدن، باید یا سینکرونایز کنید یا از روش هایی مثل پیام استفاده کنید.
اگر هم مولتی ترد نیست، که کار راحته و مشکلی نباید پیش بیاد.
منظور از چندین ترد، می تونه چندین اگزه جدا از هم هم باشه، در اینصورت باید دنبال دیتابیس باشید، مثلا اس کیو لایت https://sqlite.org/threadsafe.html