.NET 里 静态方法的并发处理

静态方法在程序运行时 就已经实例化好了 不管多少用户并发 都一样处理,不需要排队等待,实例代码:

namespace DotNet.Example
{
    using DotNet.BaseManager;

    public class StaticTest
    {
        /// <summary>
        /// 定义委托
        /// </summary>
        /// <param name="user">用户</param>
        delegate void MakeStaticDelegate(string user);

        /// <summary>
        /// 这里是测试静态方法
        /// </summary>
        /// <param name="user">用户</param>
        private static void MakeStaticTest(string user)
        {
            for (int i = 0; i < 10; i++)
            {
                // 输出当前的变量
                System.Console.WriteLine(user + ":" + i.ToString());
                System.Threading.Thread.Sleep(1000);
            }
        }

        /// <summary>
        /// 这里是模拟多用户同时点击并发
        /// </summary>
        public void DoTest()
        {
            // 模拟3个用户的并发操作
            MakeStaticDelegate makeStaticDelegate1 = new MakeStaticDelegate(MakeStaticTest);
            makeStaticDelegate1.BeginInvoke("user1", null, null);
            MakeStaticDelegate makeStaticDelegate2 = new MakeStaticDelegate(MakeStaticTest);
            makeStaticDelegate2.BeginInvoke("user2", null, null);
            MakeStaticDelegate makeStaticDelegate3 = new MakeStaticDelegate(MakeStaticTest);
            makeStaticDelegate3.BeginInvoke("user3", null, null);
            System.Console.ReadLine();
        }
    }

  


静态变量的话 并发就不行了 得加锁排队
可静态方法只是一段代码 理论上并不占用运行内存 并不存在并发的问题。

不管方法是否静态 只要方法中的变量有静态的 就得排队
而静态方法只是一段代码没有锁的问题

我们常见的SqlHelper也可以写成非静态方法 可是这样每次使用都得实例化一次 不是很麻烦吗? 它里头只是方法 不涉及变量 所以全用静态了
总之 涉及变量了 最好不要用静态 当然 方法内部的变量不算 我指的是public或protect的变量。

静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己的需要选择是用动态方法还是静态方法