首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

像static多个不同用户访问会不会共享解决方法

2013-04-20 
像static多个不同用户访问会不会共享比如一个站点,不同用户访问static变量会不会都一样的呢?如果不是又用

像static多个不同用户访问会不会共享
比如一个站点,不同用户访问static变量会不会都一样的呢?如果不是又用什么
[解决办法]
不一样,要用单例模式才可以,似如


using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
using System.Management;
using System.Diagnostics;

namespace Galsun.HH.FCX.Content
{
    /// <summary>
    /// 获取硬件信息
    /// </summary>
    public  class  Hard
    {
        private static volatile Hard instance = null;
        private static object lockHelper = new object();
        private string _HardID = string.Empty;
        /// <summary>
        /// 构造函数
        /// </summary>
        private Hard()
        {
            _HardID = GetHardInfo();
        }
        /// <summary>
        /// 获取硬件信息
        /// </summary>
        public string HardID
        {
            get
            {
                return _HardID;
            }
        }
        /// <summary>
        /// 单体模式返回当前类的实例
        /// </summary>
        /// <returns></returns>
        public static Hard GetCacheService()
        {
            if (instance == null)
            {
                lock (lockHelper)
                {
                    if (instance == null)
                    {
                        instance =  new Hard();
                    }
                }


            }
            return instance;
        }
        /// <summary>
        /// 获取硬盘ID
        /// </summary>
        /// <returns>硬盘ID</returns>
        private string GetHardInfo()
        {

            string HDInfo = "";

            ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
            ManagementClass cimobject2 = new ManagementClass("Win32_Processor");
            try
            {

                ManagementObjectCollection moc1 = cimobject1.GetInstances();

                foreach (ManagementObject mo in moc1)
                {

                    HDInfo += (string)mo.Properties["Model"].Value;
                    break;
                }
                ManagementObjectCollection moc2 = cimobject2.GetInstances();

                foreach (ManagementObject mo in moc2)
                {

                    HDInfo += (string)mo.Properties["Processorid"].Value;
                    break;
                }
            }
            catch (Exception err)
            {
                HDInfo = err.ToString();
            }
            return HDInfo;

        }

        private string RunCmd(string command)
        {
            //实例一个Process类,启动一个独立进程  
            Process p = new Process();


            //Process类有一个StartInfo属性  
            //设定程序名  
            p.StartInfo.FileName = "cmd.exe";
            //设定程式执行参数     
            p.StartInfo.Arguments = "/c " + command;
            //关闭Shell的使用    
            p.StartInfo.UseShellExecute = false;
            //重定向标准输入       
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            //重定向错误输出    
            p.StartInfo.RedirectStandardError = true;
            //设置不显示窗口  
            p.StartInfo.CreateNoWindow = true;
            //启动  
            p.Start();
            //也可以用这种方式输入要执行的命令  
            //不过要记得加上Exit要不然下一行程式执行的时候会当机  
            //p.StandardInput.WriteLine(command);  
            //p.StandardInput.WriteLine("exit"); 
            //从输出流取得命令执行结果  
            return p.StandardOutput.ReadToEnd();
        }


    }
}




            Hard hard = Hard.GetCacheService();
            GetHardID();

[解决办法]
没有动态改变值, 应该是 一样。   
单例模式只是保证 对象初始化一次的静态对象,实际上 静态成员就是共享的。

热点排行