嗨专家:)我正在使用wpf和sql server
问题1:创建了大量数据,必须每秒保存到db,但同时程序的多个部分写入相同的表。每秒保存到数据库的效率都不高,因为数据库方法很昂贵,请问专家不同意或我应该怎么做?不确定什么是最好的事情,什么时候xml或文本文件会更有用?
问题2:我必须从问题1保存到的表中检索数据库中的数据,以便我可以在实时图表上显示。这会导致读/写问题吗?
答案 0 :(得分:1)
使用逐个inserts
加载大量数据并不是一个好主意。尝试查看SqlBulkCopy
数据库处理并发性非常好,您可以将写入隔离在正确的事务中,以便在完成完整写入时只查看数据。
答案 1 :(得分:0)
1您可以使用Caching
来保存数据,可以使用Cache
类保存
链接:http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add.aspx
2您对第二种情况没有问题,您可以使用Transaction以确保您获得提交的数据。
链接:http://msdn.microsoft.com/en-us/library/system.transactions.transaction.aspx
答案 2 :(得分:0)
考虑到您有时间限制,您必须在1秒内以某种方式处理数据。
我建议:
问题1 :将您在块中生成的数据保存到Stack<..>
。在另一个Stack<..>
将块保存到数据库的线程进程之后,直到Stack<..>
不为空。由于没有任何保证,您可以在1秒内保存数据,然后将其保存在内存中。
问题2 :已将其存储在内存中,您可以实现最大可能的性能,保持在可接受的已分配内存限制内。
很难在这里建议一些真正实用的东西,因为性能总是严格地针对特定领域,这在简短的问题中无法完整描述。但解决方案,可以像基本准则一样。
答案 3 :(得分:0)
另一种选择是分解表格。
您的其他功能是否只写入记录字段的子集。
因此,在两个表之间有一个1到1的映射,一个用于初始数据,另一个用于functionA。取决于您对后端需求进行分区的能力,但它可以显着减少冲突。
基本思想是更像对象来看待你的表格。所以你有一个基表,如果它是一个类型1的东西你添加到相关表的1对1链接。类型1周围的业务函数只需要写入该表,而不是实体表。
无论如何都有可能。