问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

读写xml文件的并发量很大,大家是怎么解决的

发布网友 发布时间:2022-04-07 20:28

我来回答

3个回答

懂视网 时间:2022-04-08 00:50

FileAccess枚举

标签:

热心网友 时间:2022-04-07 21:58

测试方法:开两个线程读写同一个文件。主要是FileStream对象里面的三个参数FileMode,FileAccess,FileShared的枚举值选择。

class Program
{
private static string path = AppDomain.CurrentDomain.BaseDirectory + "cache.xml";
static void Main(string[] args)
{
Thread th1 = new Thread(Writexml);
th1.Start();
Thread th2 = new Thread(Readxml);
th2.Start();

}

static void Writexml()
{
while (true)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format("<Cache name=\"{0}\">", "aa"));
sb.AppendLine(String.Format("<Subkey name=\"{0}\">", "bb"));
sb.AppendLine(String.Format("<Data><![CDATA[{0}]]></Data>", "{\"Value\":[{\"BindingType\":\"net.tcp\",\"ServiceIP\":\"192.168.1.226\",\"ServicePort\":\"9420\",\"SvcPath\":\"HotelPayNotifyService.svc\"}]}"));
sb.AppendLine("</Subkey>");
sb.AppendLine("</Cache>");
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
byte[] bytes = Encoding.UTF8.GetBytes(sb.ToString());
fs.Write(bytes, 0, bytes.Length);
}
Thread.Sleep(200);
}
}

static void Readxml()
{
while (true)
{
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
XmlDocument doc = new XmlDocument();
doc.Load(fs);
XmlNode dataNode = doc.SelectSingleNode(String.Format("Cache/Subkey[@name='{0}']/Data", "bb"));
Console.WriteLine(dataNode.InnerText);
}
Thread.Sleep(100);
}
}

}

  这样的情况还是比较正常,在几百毫秒的情况下,这样的能够满足大部分要求了。

另:还遇到了关于Dictionary并发的问题,声明了一个静态的Dictionary对象,通过深度复制来保证并发读写不会抛异常。处理的代码如下:

Dictionary<String, Dictionary<String,
Object>> newdic = new Dictionary<string, Dictionary<string,
object>>();

using (MemoryStream ms = new MemoryStream())
{
IFormatter formator = new BinaryFormatter();
formator.Serialize(ms, dic);
ms.Seek(0, SeekOrigin.Begin);
newdic=(formator.Deserialize(ms) as Dictionary<String,Dictionary<String,Object>>);
}

热心网友 时间:2022-04-07 23:16

提升磁盘性能,服务器的话,上企业级固态,或者用固态做阵列,来获取高iops。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
强奸罪判多少年可以缓刑吗 20句充满着正能量的最励志的英语名言 如何通过cet-4? 去赤道几内亚,需要带什么行李,生活用品,在那边大概生活一年,什么东西... 去赤道几内亚需要准备什么?主要要预防什么疾病?要准备什么预防药品... 可惜!大部分消费者在交易后会取消亚马逊Prime会员资格 想问下 cpu i7 4900mq. gtx765m显卡. 32G内存 能大部分游戏效果开高么... i7 4800MQ i7 4900MQ 能有多大差别? 外星人14,显卡GTX765M。玩... 三星k2200打印机怎么升级 三星k2200打印机怎么升级br? 三星k2200打印机如何双面打? 上海房屋装修设计是按照建筑面积计算还是套内面积算呢? 上海有没有80万左右能买到的新房? 上海人均居住面积法定最低标准是多少? 上海人均住房面积小于33.4平方米 150-160W在上海能够买到哪些新房项目? 牛仔裤上的油渍怎么洗干净? 上海长滩将推出多大面积的新房?价格怎样? 怎样清洗牛仔裤上的油渍? 上海首套房认定标准对房产面积也有规定吗 用什么方法能清洗掉牛仔裤上的油渍? 上海目前公积金贷款对所购房屋的面积有限制吗 历年上海人均住房面积是多少? 牛仔裤粘上油渍了 用什么方法洗最有效果 如果能清洗掉最好 上海市房屋产权证面积是如何计算的? 上海人均住房面积是多少 老人便秘吃什么药好 我想知道一下 请帮帮我 上海新房供应量大概有多少? 上海人买房子一个家庭不能超过多少平方 老年人便秘吃什么药效果好 为什么我跟女生讲情话,或者近距离接触,下面会稍微变硬,但也不是很硬,还算是软的。有什么解决方法? 别人叫我用手机号码给他解封,对我有啥影响?是不是骗子的新手段? 微信解封得那些人是真是假啊 现在被封了,要别人帮忙解封 找了几个人都是不符合要求 , 那些解封微信的人是真的还是假的 有什么方法能找到那些需要解封微信的人? 学校要写,出省的书面申请书,该怎么写? 备案申请书怎么写 节日期间员工外出必须向单位领导报备,而且还的提前报备请示,是否违反劳动法。及个人隐私? 如果要在上海来福士门口举办活动如何去*报备?书面申请报告如何书写? 怎么分辨出一台激光打标机的功率 怎么查中国银行银行卡收支明细 男生对一个女生产生强烈的占有欲和控制欲,是什么原因? 男朋友为什么对女朋友控制欲那 么强? 男生对一个女生产生了强烈的占有欲和控制欲,是什么原因? 男生控制欲强是出于爱吗? 男友控制欲强,对我到底是真爱还是自私? 一个男人的控制欲很强怎么办 男的控制欲强的表现 一个男人控制欲强的表现 男人控制欲很强是心理问题吗