C#中System.Timers.Timer定时器的使用和定时自动清理内存的应用

项目比较大有时候会比较卡,虽然有GC自动清理机制,但是还是有不尽人意的地方。所以尝试在项目启动文件中,手动写了一个定时器,定时清理内存,加快项目运行速度。仅供大家参考吧,代码如下:

public class Program
    {
        [DllImport("psapi.dll")]
        static extern int EmptyWorkingSet(IntPtr hwProc); //清理内存相关

      static void Main()
        {
           //启动定时清理内存
            SetTimer();
       }
             /// <summary>
        /// 定时清理内存
        /// </summary>
        private static void SetTimer()
        {
            System.Timers.Timer aTimer = new System.Timers.Timer(); //初始化定时器
            aTimer.Interval = 60000;//配置时间1分钟
            aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
            aTimer.AutoReset = true;//每到指定时间Elapsed事件是到时间就触发
            aTimer.Enabled = true; //指示 Timer 是否应引发 Elapsed 事件。
        }
//定时器触发的处理事件
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
        {
         
           //清理内存
            GC.Collect();
            GC.WaitForPendingFinalizers();
            Process[] processes = Process.GetProcesses();
            foreach (Process process in processes)
            {
                //以下系统进程没有权限,所以跳过,防止出错影响效率。  
                if ((process.ProcessName == "System") && (process.ProcessName == "Idle"))
                    continue;
                try
                {
                    EmptyWorkingSet(process.Handle);
                }
                catch
                {
                }
            }
        }
   
}

C#启动System.Timers.Timer定时器每1ms发送和接收数据,并且发送和接收数据在同一线程处理,可以按照以下步骤进行: 1. 定义一个定时器对象和一个布尔变量,用于控制定时器的开关。例如: ```csharp private System.Timers.Timer timer = new System.Timers.Timer(); private bool isWorking = false; ``` 2. 在窗体的Load事件初始化定时器。例如: ```csharp private void Form1_Load(object sender, EventArgs e) { timer.Interval = 1; timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed); timer.AutoReset = true; timer.Enabled = true; } ``` 3. 在定时器的Elapsed事件处理发送和接收数据的逻辑。例如: ```csharp private void Timer_Elapsed(object sender, ElapsedEventArgs e) { if (!isWorking) { isWorking = true; // 发送数据 SendData(); // 接收数据 ReceiveData(); isWorking = false; } } ``` 4. 实现发送数据和接收数据的方法。例如: ```csharp private void SendData() { // 发送数据的逻辑 } private void ReceiveData() { // 接收数据的逻辑 } ``` 5. 在发送数据和接收数据的方法使用ManualResetEvent来阻塞等待完成后继续下一次的发送和接收。例如: ```csharp private ManualResetEvent mre = new ManualResetEvent(true); private void SendData() { // 等待上一次发送完成后再发送 mre.WaitOne(); // 发送数据的逻辑 // 发送完成后释放ManualResetEvent mre.Set(); } private void ReceiveData() { // 等待上一次接收完成后再接收 mre.WaitOne(); // 接收数据的逻辑 // 接收完成后释放ManualResetEvent mre.Set(); } ``` 通过以上步骤,就可以实现在C#启动System.Timers.Timer定时器每1ms发送和接收数据,在发送和接收数据在同一线程处理,并且在处理发送接收数据时,阻塞等待完成后,继续下一次的发送和接收了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忧郁的蛋~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值