当前位置:编程学习 > C#/ASP.NET >>

还是关于静态还是实例的问题


public class ComUtils
{
    public static string GetCookieStr(string s)//获得cookie值
    {
        HttpCookie c = HttpContext.Current.Request.Cookies[s];
        return c == null ? "" : c.Value;
    }
    public static string GetMd5(string s)//获得md5密文
    {
        MD5 md5 = new MD5();//实例
        return string.IsNullOrEmpty(s) ? "" : md5.GetMD5(s);
    }
    public static string GetReferrer//获得UrlReferrer
    {
        get
        {
            Uri Uri = HttpContext.Current.Request.UrlReferrer;
            return Uri == null ? "" : Uri.Host.ToString();
        }
    }
    public static string GetUrlTokenDecode(string s)//获得UrlTokenDecode
    {
        try
        {
            return string.IsNullOrEmpty(s) ? "" : Encoding.Default.GetString(HttpServerUtility.UrlTokenDecode(s));
        }
        catch { log4net.Error("GetTokenDecode, s=" + s); return ""; }
    }
    public static string GetIPAddress()
    {
        string s = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(s))
        {
            s = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
        }
        if (string.IsNullOrEmpty(s))
        {
            s = HttpContext.Current.Request.UserHostAddress;
        }
        if (string.IsNullOrEmpty(s))
        {
            return "";
        }
        return s;
     }
}


这些方法,使用static合适不,看了论坛上的帖子,说是没有用到方法外的适合,可是这些都有用到,就担心这样在大请求量只下会因为内存的变动引起数据错误,会不会这样啊 --------------------编程问答-------------------- 可以使用,没有问题。你可以做个测试嘛。 --------------------编程问答-------------------- 没问题就好。。。一直以为调用了其他方法在大并发下就会出问题 --------------------编程问答-------------------- 问题不大,可以使用 --------------------编程问答--------------------

    public static string GetMd5(string s)//获得md5密文
    {
        MD5 md5 = new MD5();//实例
        return string.IsNullOrEmpty(s) ? "" : md5.GetMD5(s);
    }

就这个方法而言,不仅没问题,而且是线程安全的。
因为它用到的MD5是在方法内才new出来的,
对多线程来说,每个线程都自己用自己new出来的那一个,
没有共享就没有冲突。
  --------------------编程问答--------------------
引用 1 楼 guwei4037 的回复:
可以使用,没有问题。你可以做个测试嘛。

并发量大要怎么测试? --------------------编程问答--------------------
引用 2 楼 seandro 的回复:
没问题就好。。。一直以为调用了其他方法在大并发下就会出问题

这和并发有什么关系?
你用的所有资源全是独占的,根本不会引起锁。

既然你类里所有方法都是静态的,你这个类也应该加上static
这样你的静态方法就可以改成扩展方法
比如
public static string GetMd5(this string s)

你其他地方调用的时候只要"password".GetMd5();就可以了 --------------------编程问答-------------------- 个人觉得看这个类的作用,如果这是个功能类,和别的类也没有聚合关系,那么就可以用 静态类  静态方法。
--------------------编程问答--------------------
引用 6 楼 ltcszk 的回复:
Quote: 引用 2 楼 seandro 的回复:

没问题就好。。。一直以为调用了其他方法在大并发下就会出问题

这和并发有什么关系?
你用的所有资源全是独占的,根本不会引起锁。

既然你类里所有方法都是静态的,你这个类也应该加上static
这样你的静态方法就可以改成扩展方法
比如
public static string GetMd5(this string s)

你其他地方调用的时候只要"password".GetMd5();就可以了

class  要不要static ,这个好像也都一样的吧 --------------------编程问答--------------------
引用 4 楼 rtdb 的回复:

    public static string GetMd5(string s)//获得md5密文
    {
        MD5 md5 = new MD5();//实例
        return string.IsNullOrEmpty(s) ? "" : md5.GetMD5(s);
    }

就这个方法而言,不仅没问题,而且是线程安全的。
因为它用到的MD5是在方法内才new出来的,
对多线程来说,每个线程都自己用自己new出来的那一个,
没有共享就没有冲突。
 

其它方法有什么说法吗 --------------------编程问答--------------------
引用 9 楼 u012755217 的回复:
Quote: 引用 4 楼 rtdb 的回复:


    public static string GetMd5(string s)//获得md5密文
    {
        MD5 md5 = new MD5();//实例
        return string.IsNullOrEmpty(s) ? "" : md5.GetMD5(s);
    }

就这个方法而言,不仅没问题,而且是线程安全的。
因为它用到的MD5是在方法内才new出来的,
对多线程来说,每个线程都自己用自己new出来的那一个,
没有共享就没有冲突。
 

其它方法有什么说法吗

其它方法使用了HttpContext,我个人没用过,所以不确认是否线程安全
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,