zoukankan      html  css  js  c++  java
  • 代码段

    json反序列化集中简单方式比较 资源分配多线程demo
    class
    Program { public static object mux = new object(); static List<Resource> resoureList = new List<Resource>(); static void Main(string[] args) { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 0; i < 5000; i++) { string json = "{name:"li",detail:{age:"28",height:"186"}}"; dynamic jsonobject = JsonConvert.DeserializeObject<dynamic>(json); string s = jsonobject.detail.age.ToString(); } Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 0; i < 5000; i++) { string json = "{name:"li",detail:{age:"28",height:"186"}}"; jsonclass jsonobject = JsonConvert.DeserializeObject<jsonclass>(json); string s = jsonobject.detail.age.ToString(); } Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); for (int i = 0; i < 5000; i++) { string json = "{name:"li",detail:{age:"28",height:"186"}}"; Dictionary<string, object> jsonobject = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); Dictionary<string, string> detailobject = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonobject["detail"].ToString()); string s = detailobject["age"].ToString(); } Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); string sn = string.Empty; return; int worker = GetInputNumber("please input workers number:"); int resoureses = GetInputNumber("please input resoureses number:"); for (int i = 0; i < resoureses; i++) { Resource re = new Resource(); re.name = "resource" + i; resoureList.Add(re); } for (int i = 0; i < worker; i++) { Worker workers = new Worker(); workers.name = "work" + i; workers.TryToGetResourceEvent += workers_TryToGetResourceEvent; workers.DoWorkEvent += workers_DoWorkEvent; workers.ReleaseResourceEvent += workers_ReleaseResourceEvent; Thread td = new Thread(new ThreadStart(workers.GetResourse)); td.IsBackground = true; td.Start(); } Console.ReadKey(); } static void workers_ReleaseResourceEvent(Worker currentObject) { Console.WriteLine("{0} release {1} complete !!!!!!!!!!!!!!!!!!", currentObject.name, currentObject.distributeResource.name); lock (mux) { Console.WriteLine("{0} current resoucelist {1};", currentObject.name, resoureList.Count); resoureList.Add(currentObject.distributeResource); Console.WriteLine("{0} current resoucelist {1};", currentObject.name, resoureList.Count); } //throw new NotImplementedException(); } static void workers_DoWorkEvent(Worker currentObject) { Console.WriteLine("{0} do work sleep", currentObject.name); Thread.Sleep(2000); workers_ReleaseResourceEvent(currentObject); //throw new NotImplementedException(); } static void workers_TryToGetResourceEvent(Worker currentObject) { while (!currentObject.haveResouceFlag) { //Console.WriteLine("{0} try to get resource ", currentObject.name); lock (mux) { //Console.WriteLine("{0} current resoucelist {1};" ,currentObject.name, resoureList.Count); if (resoureList.Count > 0) { currentObject.distributeResource = resoureList[0]; resoureList.RemoveAt(0); Console.WriteLine("{0} current resoucelist {1};", currentObject.name, resoureList.Count); Console.WriteLine("{0} get resource {1}", currentObject.name, currentObject.distributeResource.name); currentObject.haveResouceFlag = true; } } if (currentObject.haveResouceFlag) { workers_DoWorkEvent(currentObject); } } } private static int GetInputNumber(string message) { Console.WriteLine(message); string workers = Console.ReadLine(); int workersInt; if (!int.TryParse(workers, out workersInt)) { Console.WriteLine("number must be number"); return GetInputNumber(message); } else { return workersInt; } } } public class jsonclass { public string name; public detailclass detail; public class detailclass { public string age; public string height; } } public class Resource { public string name { get; set; } } public class Worker { public string name { get; set; } public delegate void ReleaseResource(Worker currentObject); public event ReleaseResource ReleaseResourceEvent; public delegate void GettedResource(); public event GettedResource GettedResourceEvent; public delegate void TryToGetResource(Worker currentObject); public event TryToGetResource TryToGetResourceEvent; public delegate void DoWork(Worker currentObject); public event DoWork DoWorkEvent; public Resource distributeResource { get; set; } public bool haveResouceFlag = false; public void GetResourse() { if (TryToGetResourceEvent != null) { TryToGetResourceEvent(this); } else { Console.WriteLine("{0} don't should to Get Resource", name); } } }
  • 相关阅读:
    sublime界面主题
    html5 初探
    Windows7性能监视器详解
    怎样查出SQLServer的性能瓶颈
    SQL Server资源管理之内存管理篇(下)
    SQL Server资源管理之内存管理篇(上)
    ADO.NET入门教程(八) 深入理解DataAdapter(上)
    ADO.NET入门教程(七) 谈谈Command对象高级应用
    ADO.NET入门教程(六) 谈谈Command对象与数据检索
    ADO.NET入门教程(五) 细说数据库连接池
  • 原文地址:https://www.cnblogs.com/blueker-li/p/3337255.html
Copyright © 2011-2022 走看看