httpruntime的cache中的dataset对象的线程安全问题

问题描述

我的数据从数据库取出来后保存在dataset中,然后将dataset保存在httpruntime的cache中去,n个用户同时访问我的cache中的dataset数据,会出现有的用户数据取出来的不完整,datasetds=httpruntime.cache["dataset"]然后循环ds的数据,会发现在循环的过程中ds的rows.count会有变化,当然这个时候有其他的用户在访问。我后来改进了一下:datasetds=httpruntime.cache["dataset"]datasetnewds=ds.copy()让后循环newds的数据,就不会出现数据不完整的情况,解决了丢数据的问题,但是这样对性能就有影响了,因为每个线程都要copy一份数据。想问一下,这是不是httpruntimecache的线程安全的问题,有没有什么解决办法?

解决方案

解决方案二:
没有人遇到这样的问题吗?
解决方案三:
高手呢?

时间: 2024-11-29 02:21:07

httpruntime的cache中的dataset对象的线程安全问题的相关文章

在多线程中使用静态方法是否有线程安全问题

   类的成员分为两类,静态成员(static member)和实例成员(instance member).静态成员属于类,实例成员则属于对象,即类的实例.     简单讨论一下在一个类中使用静态字段(static field)和静态方法(static method)是否会有线程安全问题.      我们在知道, 静态字段(static field)和静态方法(static method)的调用是通过类来调用.静态方法不对特定的实例操作,只能访问静态成员.实例方法可对特定的实例操作,既能访问静态

实例解析Java中的synchronized关键字与线程安全问题_实用技巧

首先来回顾一下synchronized的基本使用: synchronized代码块,被修饰的代码成为同步语句块,其作用的范围是调用这个代码块的对象,我们在用synchronized关键字的时候,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步.这叫减小锁的粒度,使代码更大程度的并发. synchronized方法,被修饰的方法成为同步方法,其作用范围是整个方法,作用对象是调用这个方法的对象. synchronized静态方法,修饰一个static静态方法,其作用范围是整个

c#中的DataSet深入探讨及RecordSet的比较

虽说ADO.NET是 ADO在.Net平台下得后继版本,但二者的区别是很大的.突出表现在ADO中的RecordSet对象和ADO.NET中的DataSet对象.RecordSet其实也是非常灵活的一个对象,微软公司推出它也是煞费苦心,如:RecordSet可以离线操作数据库教程,性能优良,效率较高等等这些都让当时的程序员为之一振.RecordSet虽然已经很复杂,但DataSet却比RecordSet复杂的多,我们知道每一DataSet往往是一个或多个DataTable 对象的集合,这些对象由数

一起谈.NET技术,XML与DataSet对象的关系

在.NET Framework 中,经常使用XML 作为存储和传输各种数据的格式.DataSet 中的数据可以转换成XML 的形式来表示和存储.我们可以使用XML 对象同步和转换DataSet 的数据,而DataSet 也可以存储和传输XML 格式的数据. XML 与 DataSet 的关系如下图所示: DataSet 对象的常用方法如下: A.  使用ReadXml( ) 方法:从文件或流中加载XML 数据,填充DataSet 对象.DataSet 对象.ReadXML( 文件路径字符串|st

XML与DataSet对象的关系

在.NET Framework 中,经常使用XML 作为存储和传输各种数据的格式.DataSet 中的数据可以转换成XML 的形式来表示和存储.我们可以使用XML 对象同步和转换DataSet 的数据,而DataSet 也可以存储和传输XML 格式的数据. XML 与 DataSet 的关系如下图所示: DataSet 对象的常用方法如下: A.  使用ReadXml( ) 方法:从文件或流中加载XML 数据,填充DataSet 对象.DataSet 对象.ReadXML( 文件路径字符串|st

OSCache中将同一个对象放在Cache中两次,那么取出来是一个对象还是两个对象?

问题描述 问题1:Stringid="id1";Objectobj=new....();Cache.put(id,obj);id="id2"Cache.put(id,obj); 如上代码,我根据id1和id2取出来的是一个对象还是两个对象?或者这么问:这两个对象在memory中是一个还是两个Copy?问题2:Carcar=newCar();Wheelwheel=newWheel();car.setWheel(wheel);Cache.put(id,car); 我从c

C#中的DataSet、string、DataTable 、对象转换成Json

/// <summary> /// 提供方法将其他类型转换为Json /// </summary> public static class ConvertToJson { #region 私有方法 /// <summary> /// 过滤特殊字符 /// </summary> /// <param name="s">字符串</param> /// <returns>json字符串</returns

ADO.NET读书笔记系列之------DataSet对象

ado|笔记|对象 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级数据 4.缓存更改 5.XML的完整性:DataSet对象和XML文档几乎是可互换的. 二.使用介绍 1.创建DataSet对象:DataSet ds = new DataSet("DataSetName"); 2.查看调用SqlDataAdapter.Fill创建的结构     da.Fill(ds,"Ord

查看cache中消耗性能的语句

sqlserver服务器内存偏高,查看下cache中sql消耗情况! /* 查询cache中的语句 说明 :可以根据类型.用户数.大小查询 */ declare @objtype varchar(20) declare @usecounts int declare @size_in_bytes int set @objtype='Adhoc'   --只能 是Adhoc.proc.Prepared ,默认是Adhoc set @usecounts=1     --数目,默认是1 set @siz