请教:
一般的代码都是 private static Dictionary<string,int> typeData = new Dictionary<string,int>();
private static object lockHelper = new object();
static void Work(string typeKey)
{
lock(lockHelper){
//执行一些相同的操作,比如
typeData[typeKey] = typeData[typeKey] + 3;
}
}但是我需要频繁的调用Work方法,比如Work("test1")就可能出现一秒钟调用十来次的情况,还有Work("test2")Work("test_n"),所以这个写法应该是有问题的,那如果我换成下面的写法不知是否能达到预期
private static Dictionary<string,int> typeData = new Dictionary<string,int>();
private static Dictionary<string, object> lockHelper = new Dictionary<string, object>();
static void Work(string typeKey)
{
lock(lockHelper[typeKey]){ //lockHelper[typeKey]是确定存在且已经初始化了的 lockHelper[typeKey] = new object();
//执行一些相同的操作,比如
typeData[typeKey] = typeData[typeKey] + 3;
}
}另外如果用ReaderWriterLockSlim是否和前面的使用一个object的效果一致呢。
一般的代码都是 private static Dictionary<string,int> typeData = new Dictionary<string,int>();
private static object lockHelper = new object();
static void Work(string typeKey)
{
lock(lockHelper){
//执行一些相同的操作,比如
typeData[typeKey] = typeData[typeKey] + 3;
}
}但是我需要频繁的调用Work方法,比如Work("test1")就可能出现一秒钟调用十来次的情况,还有Work("test2")Work("test_n"),所以这个写法应该是有问题的,那如果我换成下面的写法不知是否能达到预期
private static Dictionary<string,int> typeData = new Dictionary<string,int>();
private static Dictionary<string, object> lockHelper = new Dictionary<string, object>();
static void Work(string typeKey)
{
lock(lockHelper[typeKey]){ //lockHelper[typeKey]是确定存在且已经初始化了的 lockHelper[typeKey] = new object();
//执行一些相同的操作,比如
typeData[typeKey] = typeData[typeKey] + 3;
}
}另外如果用ReaderWriterLockSlim是否和前面的使用一个object的效果一致呢。
解决方案 »
- C# 读取移动设备的文件信息。有盘符,只显示WindowsCE。
- 实时读access数据库,在chart控件显示。出错提示:集合已修改;可能无法执行枚举操作。
- 配置文件Settings.settings的值是存哪里的
- 带SQL SERVER 数据库的应用程序部署问题
- WEB的网格可否画成以下样式
- winform如何实现类似VS.NET开发工具的选项卡?
- c#如何判断打印完成
- 如何改写C++中这样的结构体
- 大家好:请问在C#中如何判断一个Textbox.text的值是中文来是English呢存不存在呢,内宾如下,在线呀
- C# 如何判断当前激活的窗体是桌面?
- QQ如何实现的网页的一键登录 是什么原理呢?
- Sendmessage(句柄,消息常量,参数3,参数4)
{
private static Dictionary<string, int> typeData = new Dictionary<string, int>();
private static Dictionary<string, object> lockHelper = new Dictionary<string, object>(); static Demo()
{
List<string> configData = new List<string>() { "test1", "test2" }; //从配置文件中获取的,运行时项不会有变动
foreach (var data in configData)
{
typeData.Add(data, 0);
lockHelper.Add(data, new object());
}
} static void Work(string typeKey)
{
if (typeData.ContainsKey(typeKey) == false) return; lock (lockHelper[typeKey])
{
//执行一些相同的操作,比如
typeData[typeKey] = typeData[typeKey] + 3;
}
}
}