اسم العضو كلمة المرور حفظ البيانات؟ تسجيل عضوية



ايجى4يو || Egy4u



اعلانات ايجى4يو


المشاركات: 27 [+]
المخالفات: [+]
مجموع الاوسمة: [+]
محمد مصطفي غير متواجد حالياً
محمد مصطفي
( مراقب اقسام كونكر برفيت )
شرح : تقليل سحب ال Cpu في كل السورسات !
: 07-22-2017 فى تمام الساعة 08:59 PM| المشاركة رقم: 1| من قسم: تطوير سيرفرات كـــونـــكر تـــهيس

انهاردا ان شاء الله هنحل مشكلة سحب الرام او ال Cpu ,
بخطوات بسيطه وسهل اي حد يعملها بعد الشرح ,



أولا هتدخل ع المسار دا في سورسك ,

Network\GamePackets ,

هتعمل فولدر جديد بأسم Cpu ,

وهتعمل كلاس في الفولدر دا بأسم CpuUsage ,

وهتضيف فيه الاكواد دي ,

Html

using System
using System.Diagnostics
using System.Runtime.InteropServices
using System.Threading
using ComTypes System.Runtime.InteropServices.ComTypes

namespace 
TroZenA 


    public class 
CpuUsage 
    


        public static 
void CpuUsageThread(object state
        { 
            
CpuUsage usage = new CpuUsage(); 
            while (
true
            { 
                if (!
Program.CpuUsageTimer
                { 
                    
System.Threading.Thread.CurrentThread.Abort(); 
                } 
                
short cpuUsage usage.GetUsage(); 
                
Program.CpuUse cpuUsage
                
System.Threading.Thread.Sleep(500); 
            } 
        } 

        [
DllImport("kernel32.dll"SetLastError true)] 
        private static 
extern bool GetSystemTimes
                    
out ComTypes.FILETIME lpIdleTime
                    
out ComTypes.FILETIME lpKernelTime
                    
out ComTypes.FILETIME lpUserTime 
                    
); 

        
ComTypes.FILETIME _prevSysKernel
        
ComTypes.FILETIME _prevSysUser

        
TimeSpan _prevProcTotal

        
Int16 _cpuUsage
        
DateTime _lastRun
        
long _runCount

        public 
CpuUsage() 
        { 
            
_cpuUsage = -1
            
_lastRun DateTime.MinValue
            
_prevSysUser.dwHighDateTime _prevSysUser.dwLowDateTime 0
            
_prevSysKernel.dwHighDateTime _prevSysKernel.dwLowDateTime 0
            
_prevProcTotal TimeSpan.MinValue
            
_runCount 0
        } 

        public 
short GetUsage() 
        { 
            
short cpuCopy _cpuUsage
            if (
Interlocked.Increment(ref _runCount) == 1
            { 
                if (!
EnoughTimePassed
                { 
                    
Interlocked.Decrement(ref _runCount); 
                    return 
cpuCopy
                } 

                
ComTypes.FILETIME sysIdlesysKernelsysUser
                
TimeSpan procTime

                
Process process Process.GetCurrentProcess(); 
                
procTime process.TotalProcessorTime

                if (!
GetSystemTimes(out sysIdleout sysKernelout sysUser)) 
                { 
                    
Interlocked.Decrement(ref _runCount); 
                    return 
cpuCopy
                } 

                if (!
IsFirstRun
                { 
                    
UInt64 sysKernelDiff SubtractTimes(sysKernel_prevSysKernel); 
                    
UInt64 sysUserDiff SubtractTimes(sysUser_prevSysUser); 

                    
UInt64 sysTotal sysKernelDiff sysUserDiff

                    
Int64 procTotal procTime.Ticks _prevProcTotal.Ticks

                    if (
sysTotal 0
                    { 
                        
_cpuUsage = (short)((100.0 procTotal) / sysTotal); 
                    } 
                } 

                
_prevProcTotal procTime
                
_prevSysKernel sysKernel
                
_prevSysUser sysUser

                
_lastRun DateTime.Now

                
cpuCopy _cpuUsage
            } 
            
Interlocked.Decrement(ref _runCount); 

            return 
cpuCopy
        } 

        private 
UInt64 SubtractTimes(ComTypes.FILETIME aComTypes.FILETIME b
        { 
            
UInt64 aInt = ((UInt64)(a.dwHighDateTime << 32)) | (UInt64)a.dwLowDateTime
            
UInt64 bInt = ((UInt64)(b.dwHighDateTime << 32)) | (UInt64)b.dwLowDateTime

            return 
aInt bInt
        } 

        private 
bool EnoughTimePassed 
        

            
get 
            

                const 
int minimumElapsedMS 250
                
TimeSpan sinceLast DateTime.Now _lastRun
                return 
sinceLast.TotalMilliseconds minimumElapsedMS
            } 
        } 

        private 
bool IsFirstRun 
        

            
get 
            

                return (
_lastRun == DateTime.MinValue); 
            } 
        } 
    } 



وهتعمل كلاس تاني باسم MemoryCompressor ,

وهتضيف فيه الاكواد دي ,

Html

using System
using System.Diagnostics
using System.Runtime.InteropServices

namespace 
TroZenA 


    public class 
MemoryCompressor 
    


        
internal class Native 
        


            
// API Windows  
            
[DllImport("kernel32")] 
            public static 
extern IntPtr OpenProcess(UInt32 dwAccessInt32 dwDesiredAccessUInt32 dwPID); 

            [
DllImport("psapi")] 
            public static 
extern Int32 EmptyWorkingSet(IntPtr dwObject); 

            [
DllImport("kernel32")] 
            public static 
extern Int32 CloseHandle(IntPtr dwObject); 

            
internal static unsafe void memcpy(bytebufferbyteptrint p
            { 
                throw new 
NotImplementedException(); 
            } 
        } 

        private 
uint m_ProcessId 0

        public 
MemoryCompressor() 
        { 
            
m_ProcessId = (uint)Process.GetCurrentProcess().Id
        } 

        public 
void Optimize() 
        { 
            if (
m_ProcessId != 0
            { 
                
IntPtr Handle Native.OpenProcess((uint)0x1F0FFF1m_ProcessId); 
                
Native.EmptyWorkingSet(Handle); 
                
Native.CloseHandle(Handle); 
            } 
            else 
                throw new 
Exception("MeomoryCompressor::Optimize() -> The process Id can't be equal to zero!"); 
        } 

        public 
void Close() 
        { 
            
m_ProcessId 0
        } 
    } 



تمام بعد كدا هتفتح كلاس Program أو Server علي حسب سورسك ,

وهتضيف فيه الاكواد دي وعشان متوهش ابحث عن الكود دا ,

Html

public static ServerSocket AuthServer
وضيف تحته الاكواد دي ,

Html

public static bool CpuUsageTimer true
        public static 
MemoryCompressor MCompressor = new MemoryCompressor(); 
        public static 
int CpuUse 0


كدا الاضافة خلصت تعالي نشغلها بقا ,

هتفتح ملف Program وتروح علي كود اللود ,

يعني الكود الي فيه كونفيجريشن واللود بتاع السستمات ,

وهتضيف فوق كل كام لود الكود دا ,

Html

 /////////////////////////////Cpu////////////////////////////// 
            
Program.MCompressor.Optimize(); Program.MCompressor.Optimize(); 
            
Program.MCompressor.Optimize(); Program.MCompressor.Optimize(); 
            
/////////////////////////////Cpu////////////////////////////// 
دا زي التكييف في الحر بالظبط بالنسبه للسورس




 
المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
حوار الشوبات الى مش بترضى تبيع ايتم فى معظم السورسات ! محمد مصطفي تطوير سيرفرات كـــونـــكر تـــهيس 0 07-22-2017 07:13 PM
فكك من باقي السورسات و خد السورس ده من الاخر محمودمحمدسالم سورســـات كـــونـــكر تـــهيس 28 04-09-2017 09:58 AM