سلام دوستان
من یک برنامه Windows دارم که بخشی از آن به زبان C# MS .NET Framework نوشتم ولی هسته اصلی آن که کار را انجام میدهد توسط شخص دیگری به زبان Win32 نوشته شده است.
مشکلی که در اجرای آن میبینم مربوط به سرعت آن میشود. به خاطر نیاز ما لازم است چند تا از این برنامه در سیستم عامل مان در کنار هم اجرا شوند. البته من هر کدام را با یک حساب کاربر Windows Account اختصاصی اجرا کرده ام (با TaskScheduler میتوان این کار را کرد).
وقتی درخواستی به یکی از آن برنامه محول میشود، در کامپیوتر خودم (Win10) که برای برنامه نویسی است، فوری CPU به 100% میرود و کار شروع میشود ولی در کامپیوتر سرور که مشکل ما در آن اتفاق میافتد، در مواقعی اول Disk Activity به 100% میرسد بعد از چند دقیقه به حالت نرمال برمیگردد و بعدCPU به 100% میرود و کار اصلی از آن موقع شروع میشود. این مشکل همیشه اتفاق نمیافتد و همین کار اشکال یابی را مشکل میکند.
من در لحظه کار نکردن برنامه در Resource Monitor دیدم مثل اینکه چند پروسه از این برنامه من که اسمش را SDLAutomation.Console.exe گذاشته ام سر PageFile با هم رقابت میکنند، چون از عکسی که گرفتم این را نشان میدهد:
pagefile_hang.png
سیستم عامل سرور ما WindowsServer 2012 است. من حدس میزنم دوستانی که به زبان ++C آشنا هستند شاید بتوانند با تنظیم سیستم عامل کاری کنند که حافظه ها یا همان Pagefile ها تداخل نکنند. مثلا در صفحه
System Properties--> Advanced --> Performance Options ---> Data Execution Prevention
به این تنظیم مشکوک هستم. بخصوص که پیش فرض این تنظیم در Windows Server با Windows 10 فرق میکند و در اولی برای همه برنامهها فعال است.
----
با برنامه مخصوص debug به نام DebugDiag که وضعیت برنامه را در لحظه خطا نشان میدهد گزارشی تهیه کردم ، که قسمت warningی دارد که میگوید:
Warning
Number of objects ready for finalization: 476
Description Recommendation
This is an indication that your finalizer thread may be blocked. Look at finalizequeue info and finalizer stack to determine why/if the finalizer is blocked