MSSQL输出1000条记录不到一秒,但转化为 JObject再变字符串究然耗时超过2分钟,什么问题

goodgame365 2020-11-30 09:53:05
今天碰到一个耗时异常的问题

从MSSQL读取1000条记录,在分析查询器那里测试,不到一秒就出结果了

但在C#了,将每条记录转为

-----------------
foreach (DataRow rs in dt.Rows)
{
ii++;
JObject jOb= new JObject();
jOb.Add(new JProperty("SourceID", rs["SourceID"]));
jOb.Add(new JProperty("RoomNum", rs["RoomNum"]));


。。。 。。。
----------------

竟用了好久,然后我再将jOb这个对象转为字符串jobj.ToString(),发现这个用时更久,不知什么原因,

说明下,job每条记录是这样的
{
"SourceID": 8243,
"RoomNum": "0202",
"SourceTag": "\u9614\u7ef0\u4e09\u623f,\u5357\u5317\u901a\u900f,\u5165\u6237\u82b1\u56ed",
"housetypes": "3\u623f2\u5385",
"CoveredArea": 119.68,
"Floors": 2,
"SourceImg": "house/2020_4/30/s_20200430085521VTL000.jpg",
"oneprice": 6161.0,
"totprice": 737348.5,
"IsOnline": true,
"IsSold": false,
"HouseTypeID": 97
},



共有981条,存为文本的话是379K,但调试时出结果耗时几分钟,是哪里出问题了呢,请高人指点,万分感谢!



...全文
11329 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
生财 2020-12-07
  • 打赏
  • 举报
回复
楼主试试直接用字符串拼接看看,是否也一样慢, 慢的原因可能是jObject 转换时内部存在较耗时的初始化操作. 第一次执行特别慢(可能存在动态编译表达树之类的), 第二次就快了.
jun471537173 2020-12-05
  • 打赏
  • 举报
回复
尽量不要在循环中读数据库,可以先把数据都读到内存中再进行操作。
goodgame365 2020-12-02
  • 打赏
  • 举报
回复
我发现问题了,原来还是我一直纠结的问题,是一次lef join 联合查询的效率高还是 遍历数据时循环再读取另一张表效率高,实际发现,遍历数据时,如果里面不在二次调取另一张表的数据,大概用时2秒左右,至于上次我提到的jOb这个对象转为字符串jobj.ToString()耗时久,诂计是我的破电脑的原因,再执行这里断点点开后,秒完成,没再发生! 那么问题来了,如果全部 left join联合查询,有些是需要调取多条记录的怎么办呢?
  • 打赏
  • 举报
回复
基本上,就算是100万行,查询分析器告诉“秒告诉”你有100万行查询结果,然后当你序列化到 asp.net 控件也得几十分钟吧?!不需要看就不要弄到客户端,如果 html 能看的就不要弄什么 DataGrid,内存对象保存数据就可以的既不要弄什么 asp.net 控件,强类型高级对象可以的就不用使用低级的字符串去组织 JObject。
  • 打赏
  • 举报
回复
你在查询分析器数过它详细列出来确实是将近1000行了吗?
gs0038 2020-12-01
  • 打赏
  • 举报
回复
这玩意自己拼接自己控制,别人封装的属于大众化的,不一定适合你自己呢
  • 打赏
  • 举报
回复
你是要 datatable 转json吗? 直接就转了 ,别转成JObject 了 引用微软的Newtonsoft.Json; JsonConvert.SerializeObject(ds) 就是json包了。 而且你的写法有问题, 为什么 JObject jOb= new JObject();                     jOb.Add(new JProperty("SourceID", rs["SourceID"]));                     jOb.Add(new JProperty("RoomNum", rs["RoomNum"])); 不是应该创建一个 list<JObject > a= new list<JObject > JObject 创建个实体类 然后 for() { JObject  b =new JObject (); b.lie=zhi; a.add(b); } 你多还几个写法 就知道实际浪费在哪里了

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧