zoukankan      html  css  js  c++  java
  • .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的变量。

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

  • 相关阅读:
    使用exe4j将java项目打成exe执行程序
    使用exe4j将java项目打成exe执行程序
    使用exe4j将java项目打成exe执行程序
    使用exe4j将java项目打成exe执行程序
    Java 数组 之 二维数组
    Java 数组 之 二维数组
    自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/wanglg/p/3478502.html
Copyright © 2011-2022 走看看