最近碰到一个需求:需要从XML格式的文本中解析数据,并写入数据库表中。遇到这种情况自然是EF+WinForm开干,写完程序之后跑了一下,发现速度有点慢,因为数据急着要,所以就这么拿去用了。最后实际运行的速度大概是2W条数据10分钟左右。
后面仔细想了想,性能不应该这么低才对。首先想到会不会是多线程的问题,于是看了下资源监视器,所有核心都是在跑的。
(程序运行时的CPU占用)
然后在代码里加Stopwatch,分析代码运行时间发现解析(并写入)1000条数据的时间是25秒,并且程序运行到后面速度会越来越慢。
(每1000条数据执行时间,到最后时间翻了一倍多)
此时的主要代码如下,可以看到性能瓶颈无非就是XML解析和数据保存。但是加断点执行两次感觉XML解析没什么问题,于是打算从数据保存部分下刀,把DbContext改成直接执行SQL。
foreach(XmlNode p in nodes)
{
JTCY j = new JTC