c# - 从数据表中多线程读取 - C#
问题描述
我有一个多线程环境(Web 应用程序),我有一个静态数据表(在我的 ConcurrentDictionary 自定义缓存对象中),我仅用于从中读取数据。
与从该数据表循环读取的所有页面共享相同的静态数据表是否安全?我猜想通过索引从行中访问和读取数据应该是线程安全的?
如果我以下列方式访问我的数据表对象呢?或者我应该使用我的 GetFromCache() 方法将 datatable.copy() 对象返回给每个调用线程?
DataTable dtcountrySelector = GetFromCache(some conditions);
if (dtcountrySelector != null)
{
List<MarketPlace> convertedList = (from drCountry in dtcountrySelector.AsEnumerable()
select new MarketPlace()
{
SiteName = Convert.ToString(drCountry["name"] ?? ""),
SiteId = Convert.ToInt32(drCountry["siteid"] ?? 0),
SiteCode = Convert.ToString(drCountry["sitecode"] ?? "")
}).ToList();
return convertedList;
谢谢你。
解决方案
该类对于多线程读取操作是安全DataTable
的。但是您应该知道,ADO.NET 类是高度互连的,看似无害的操作仍然会导致. 例如,调用该方法足以改变 a 的内部状态,即使没有在集合中添加行。另一个例子:当两个s 都是同一个 s 的一部分时,向另一个 s 添加行可能会导致两个s 发生突变。DataTable
DataTable.NewRow
DataTable
DataTable.Rows
DataTable
DataTable
DataSet
DataTable
推荐阅读
- r - 如何根据 R 中的映射文件迭代一个数据帧?
- reactjs - 从数组中获取价格并传递给贵重物品以供将来计算 React
- sql - 比较并从两个不同表的两列中获取缺失值
- javascript - 如何使用 .querySelector() 获取网页元素?Webdriver-io
- javascript - 当 useState 不用于值而是用于对象时,为什么从 React 的输入字段中忽略值?
- python - 如何在熊猫中提取比平均值大 15% 的值
- html - woocommerce 产品变体的自定义 HTML 结构
- javascript - Javascript - 提取页面 url 并获取路径名
- python - 宽度 - 第一次遍历只返回一个节点
- python - 动态网页抓取 - 无法获取所有项目