当前位置:编程学习 > C#/ASP.NET >>

讨论C#缓存问题,来者有分!

今天就要离开公司了,等待最后通知。
有一事不明,需要搞清楚一下,特献上200分!

C#有没有好的数据缓存,Memcache不知道大家用过没有?
大型分布式站点中,如何假设缓存,缓存如何及时被更新?以及缓存依赖的问题如何解决?

大家讨论一下啊
有资料的直接发上来了 --------------------编程问答-------------------- 沙发抢了~~~关注~~ --------------------编程问答-------------------- 抢分 --------------------编程问答-------------------- 这个问题对于我们新手说显得很深奥了 

学习。。。。 --------------------编程问答-------------------- Mark,帮楼主顶顶,顺便学习 --------------------编程问答-------------------- 以下是我在工作中整理的:
缓存
缓存机制
页输出缓存:保存页处理输出,下次重用所保存的输出
应用程序缓存:允许缓存所生成的数据,如DataSet

㈠页输出缓存

1、页输出缓存的几中形式
①<%@ OutputCache Duration="60" VaryByParam="None" Location="Any"%>
Location指定在哪个地方缓存,Any任何地方都缓存。
60秒以内看到的都是一样的了。
②还可在配置文件里写,然后在页面调用配置文件的缓存名称。
③用编程的方式:
Response.Canche.SetExpires(DateTime.Now.AddSeconds(3));
Response.Canche.SetCacheabiliy(HttpCacheability.Public);
Response.Canche.SetValidUntilExpires(true);
相当于:
Public => Any
Private => Client
NoCache => None
Server => Server
ServerAndPrivate =>ServerAndClient

2、使用文件依赖项缓存页输出
产生背景:有时候,可能需要在文件发生更改时从输出缓存中移除某一项。就是说文件改了以后缓存立即失效。
string filepath = Server.MapPath("TextFile1.txt");
Response.AddFileDependency(filepath);//添加缓存依赖项
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntiExpires(true);

3、缓存多个版本
①使用请求的浏览器对页的各个版本进行缓存
<%@OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser"%>
②使用参数对页的各个版本进行缓存
<%@OutputCache Duration="60" VaryByParam="City"%>
这个调试可以在url后加QueryString
如:...url?City=shanghai
程序里得到这个上海然后再做其他的操作,这个时候如果参数传的还是shanghai它就不会在走到程序里了。

4、动态更新缓存页的部分,有三种方法可以实现部分不缓存
①已声明方式使用Substitution控件
<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentDateTime" />
public static string GetCurrentDateTime(HttpContext context)
{
return DateTime.Now.ToString();
}
//方法签名必须和委托签名一致
②以编程的方式使用Substitution控件API
Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetCurrentDateTime))
③以隐式方式使用AdRotator控件
这个控件永远都是不缓存的

㈡SQL Server依赖的缓存,非常之有用
当表数据发生改变就清除缓存

1、为SQL Server启用缓存通知
aspnet_regsql.exe -S <Server> -U <Username> -P <Password>
-ed -d Northwind -et -t Employees
Server:服务器
Username:用户名
Password:密码
Northwind:数据库
Employees:表
2、为缓存功能配置网页
<%@OutputCache Duration="3600" SqlDependency="Northind:Employees" VaryByParam="none"%>
3、在Web.config文件中设置缓存配置
<caching>
 <sqlCacheDependency enabled="true" pollTime="1000">
  <database>
   <add name="Northind" connectionStringName="..." pollTime = "1000" />
   </database>
 </sqlCacheDependency>
</caching>
//这里的name要是数据库名称
--------------------编程问答-------------------- SQL Server 2005中的数据缓存可以建立数据库依赖
对于分布式系统
我参与过的一个门户网站的结构是使用XML缓存
然后建立不同的更新规则更新 --------------------编程问答-------------------- 过去在学校学习的时候  老师讲过 可以根据数据源 有没有更新 判断是否 重新获得数据
时时监视   不过没有用过 --------------------编程问答-------------------- 缓存
缓存机制
页输出缓存:保存页处理输出,下次重用所保存的输出
应用程序缓存:允许缓存所生成的数据,如DataSet

㈠页输出缓存

1、页输出缓存的几中形式
①<%@ OutputCache Duration="60" VaryByParam="None" Location="Any"%>
Location指定在哪个地方缓存,Any任何地方都缓存。
60秒以内看到的都是一样的了。
②还可在配置文件里写,然后在页面调用配置文件的缓存名称。
③用编程的方式:
Response.Canche.SetExpires(DateTime.Now.AddSeconds(3));
Response.Canche.SetCacheabiliy(HttpCacheability.Public);
Response.Canche.SetValidUntilExpires(true);
相当于:
Public => Any
Private => Client
NoCache => None
Server => Server
ServerAndPrivate =>ServerAndClient

2、使用文件依赖项缓存页输出
产生背景:有时候,可能需要在文件发生更改时从输出缓存中移除某一项。就是说文件改了以后缓存立即失效。
string filepath = Server.MapPath("TextFile1.txt");
Response.AddFileDependency(filepath);//添加缓存依赖项
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntiExpires(true);

3、缓存多个版本
①使用请求的浏览器对页的各个版本进行缓存
<%@OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser"%>
②使用参数对页的各个版本进行缓存
<%@OutputCache Duration="60" VaryByParam="City"%>
这个调试可以在url后加QueryString
如:...url?City=shanghai
程序里得到这个上海然后再做其他的操作,这个时候如果参数传的还是shanghai它就不会在走到程序里了。

4、动态更新缓存页的部分,有三种方法可以实现部分不缓存
①已声明方式使用Substitution控件
<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentDateTime" />
public static string GetCurrentDateTime(HttpContext context)
{
return DateTime.Now.ToString();
}
//方法签名必须和委托签名一致
②以编程的方式使用Substitution控件API
Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetCurrentDateTime))
③以隐式方式使用AdRotator控件
这个控件永远都是不缓存的

㈡SQL Server依赖的缓存,非常之有用
当表数据发生改变就清除缓存

1、为SQL Server启用缓存通知
aspnet_regsql.exe -S <Server> -U <Username> -P <Password>
-ed -d Northwind -et -t Employees
Server:服务器
Username:用户名
Password:密码
Northwind:数据库
Employees:表
2、为缓存功能配置网页
<%@OutputCache Duration="3600" SqlDependency="Northind:Employees" VaryByParam="none"%>
3、在Web.config文件中设置缓存配置
<caching>
 <sqlCacheDependency enabled="true" pollTime="1000">
  <database>
   <add name="Northind" connectionStringName="..." pollTime = "1000" />
   </database>
 </sqlCacheDependency>
</caching>
//这里的name要是数据库名称

---------------------------------------不错。。顶一个。。 --------------------编程问答-------------------- 學習 --------------------编程问答-------------------- 我觉得用一个中间的服务器来专业做缓存较好,用系统自带的缓存机制对于分布式应用不容易实现吧 --------------------编程问答-------------------- 缓存
缓存机制
页输出缓存:保存页处理输出,下次重用所保存的输出
应用程序缓存:允许缓存所生成的数据,如DataSet --------------------编程问答-------------------- 学习
我这里有一个连接的是sql2005,用不着设置webconfig。可是总是报错说找不到数据库。

大家帮我看看那里错了。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ OutputCache Duration="1000" SqlDependency="DLOcean:PORE_DATA" VaryByParam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
        <table>
        <tr>
            <td>
                 <asp:Label ID="lbl1" runat="server"></asp:Label>
            </td>
        </tr>
        <tr>
            <td>
               <asp:GridView ID="gv1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1" >
                   <Columns>
                       <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" />
                       <asp:BoundField DataField="CD_ID" HeaderText="CD_ID" SortExpression="CD_ID" />
                       <asp:BoundField DataField="AD" HeaderText="AD" SortExpression="AD" />
                       <asp:BoundField DataField="DATA" HeaderText="DATA" SortExpression="DATA" />
                       <asp:BoundField DataField="CLSJ" HeaderText="CLSJ" SortExpression="CLSJ" />
                   </Columns>
               </asp:GridView>
               <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DLOceanConnectionString %>"
                    SelectCommand="SELECT [ID], [CD_ID], [AD], [DATA], [CLSJ] FROM [PORE_DATA]" SqlCacheDependency="DLOcean:PORE_DATA" EnableCaching="True">
               </asp:SqlDataSource>
            </td>
        </tr>
        </table>
        </div>
    </form>
</body>
</html>

--------------------编程问答-------------------- 学习,现在还不知道那玩意干什么用 --------------------编程问答-------------------- 不懂。学习ing! --------------------编程问答-------------------- 分布式比较理想 --------------------编程问答-------------------- mark,分布没用过,不清楚
--------------------编程问答-------------------- 学习
我这里有一个连接的是sql2005,用不着设置webconfig。可是总是报错说找不到数据库。

大家帮我看看那里错了。
--------------
DLOceanConnectionString这个里面是怎么写的? --------------------编程问答-------------------- xuexi --------------------编程问答-------------------- 查询一定不需要缓存吧?:-),个人认为缓存还是得用到合适的地方

例如:加载皮肤,语言之类的缓存比较有意义。
反射 用 static readonly 就好了
其他的还真想不到 --------------------编程问答-------------------- ding --------------------编程问答-------------------- 上面说的都是asp.net里面的缓存机制把
C#里面有自己的缓存机制吗?我好像没有听说过阿 --------------------编程问答-------------------- 上面说的都是asp.net里面的缓存机制把
C#里面有自己的缓存机制吗?我好像没有听说过阿
----------------
有asp.net和c#这分吗?
asp.net中用到的缓存机制,大部分都能用代码在C#中写的。
--------------------编程问答-------------------- 有缓存啊!就是不知道是不是楼主所要的那种
--------------------编程问答-------------------- ASP.NET中的数据缓存有许多种,一般来说大型的数据使用 Cache对象缓存,用户身份信息用Session对象缓存,小型数据用Cookie对象缓存在客户端。

其中 Cache和Session应该属于系统级的缓存,Cookie属于用户客户端的缓存

除此之外还有用户控件的缓存,我转载一篇文章来详细介绍用户控件的缓存
<%@ OutputCache Duration="60" VaryByParam="*" %>

如同其他页面指令一样,该指令应该出现在ASPX页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。
  Duration 必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。 
  Location 指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之:Any、Client、Downstream、None、Server或ServerAndClient。
  VaryByParam 必需属性。Request中变量的名称,这些变量名应该产生单独的缓存条目。“none”表示没有变动。“*”可用于为每个不同的变量数组创建新的缓存条目。变量之间用“;”进行分隔。
  VaryByHeader 基于指定的标头中的变动改变缓存条目。
  VaryByCustom 允许在global.asax中指定自定义变动(例如,“Browser”)。
  利用必需的Duration和VaryByParam选项的组合可以处理大多数情况。例如,如果您的产品目录允许用户基于categoryID和页变量查看目录页,您可以用参数值为“categoryID;page”的VaryByParam将产品目录缓存一段时间(如果产品不是随时都在改变,一小时还是可以接受的,因此,持续时间是3600秒)。这将为每个种类的每个目录页创建单独的缓存条目。每个条目从其第一个请求算起将维持一个小时。
VaryByHeader和VaryByCustom主要用于根据访问页面的客户端对页面的外观或内容进行自定义。同一个URL可能需要同时为浏览器和移动电话客户端呈现输出,因此,需要针对不同的客户端缓存不同的内容版本。或者,页面有可能已经针对IE进行了优化,针对Netscape或Opera则应取消这种优化功能。后一个例子非常普遍,我们将提供一个说明如何实现此目标的示例:
  示例:VaryByCustom用于支持浏览器自定义
  为了使每个浏览器都具有单独的缓存条目,VaryByCustom的值可以设置为“browser”。此功能已经内置在缓存模块中,并且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"%>

示例:
<%@ OutputCache Duration="60" VaryByParam="*" %>
该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
<%@ OutputCache Duration="60" VaryByParam="none" 
VaryByControl="CategoryDropDownList" %>
该示例将缓存用户控件60秒,并且将针对CategoryDrop
  DownList控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。
<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" 
Shared="true" %>
最后,该示例将缓存用户控件60秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件即可)。

下面的示例说明了如何设置页或用户控件进行输出缓存的持续时间。
<%@ OutputCache Duration="100" VaryByParam="none" %> --------------------编程问答-------------------- 缓存的教程和文章倒是看过不少,什么文件依赖,数据库依赖,页面缓存也都试过,就是没有实际应用到项目上,所以我能说的楼主都已经知道了吧 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习学习 --------------------编程问答-------------------- 帮顶.也学习一下.! --------------------编程问答-------------------- up ,study --------------------编程问答-------------------- 共同学习,共同进步 --------------------编程问答-------------------- 我对缓存的第一个反映就是:Cache --------------------编程问答-------------------- up --------------------编程问答-------------------- thx.mark~~ --------------------编程问答-------------------- mark一下
随便学习 --------------------编程问答-------------------- cookie ,  session  ,   application... --------------------编程问答-------------------- 学习,学习,再学习。。。。 --------------------编程问答-------------------- 转:
大家都应该清楚把实体对象更新到数据库必须经过一系列的转换;特别是SQL语句的生成是比较费资源的,因为中间处里的东西实大是太多了。
在设计的过程中我就想如果一个对象插入数据库后把相应的Command保存在缓存中;下一次同一个类型的对象做这个操作时检测一下缓存如果有就直接拿来用这样效率应该会高些。
抱着这种想法就开始设计了(不过心里还是上上下下的,毕竟第一次尝试)。
因为缓存中的对象处理比较复杂点,在多线程中存在共享的问题,如果两个线程同时调用同一个Command这样一定会产生处理错误的!
为了更好地控制Command对象的共享,特别为Command定义了持久化的接口。
经过一段时间的设计和编写,算有点成果吧,顺把自己做的东西共享一下。


以下是组件测试的情况
P4 2.4 1G
SqlServer sp3

运行的代码大概如下:
Entitys.Customers customer = new Test.Entitys.Customers();
DateTime dt = DateTime.Now;
using(HFSoft.Data.IDataSession session = mapcontainer.OpenSession())
{
 session.Open();
 for(int i =0;i<2000;i++)
 {
  customer.CustomerID = Guid.NewGuid().ToString();
  customer.CompanyName = "henry";
  session.Save(customer);
 }
}
tp1 = new TimeSpan(DateTime.Now.Ticks - dt.Ticks);


不开启缓存(5个线程运行时间)
00:00:05.7031250
00:00:06.8281250
00:00:05.0156250
00:00:06.6875000
00:00:06.4218750
--------------------------------------------------------
开启5个命令缓存(5个线程运行时间)
00:00:04.8906250
00:00:03.5625000
00:00:02.8750000
00:00:04.9375000
00:00:05.4843750
---------------------------------------------------------

以下是缓存类的源码
/// <summary>
/// 数据缓存保存信息异步处理委托
/// </summary>
delegate  void EventSaveCache(object key,object value);
/// <summary>
/// 对象缓存类
/// </summary>
public class Cache
{
private MappingContainer mContainer;
/// <summary>
/// 获取或设置当前缓存对象所在的关系映象容器
/// </summary>
public MappingContainer Container
{
 get
 {
  return mContainer;
 }
 set
 {
  mContainer = value;
 }
}
/// <summary>
/// 构造缓存对象
/// </summary>
public Cache()
{
 //
 // TODO: 在此处添加构造函数逻辑
 //
}
/// <summary>
/// 用于缓存数据的Hashtable
/// </summary>
protected  System.Collections.Hashtable _Cache = new System.Collections.Hashtable();
protected Object _LockObj = new object();
/// <summary>
/// 获取指定键值的对象
/// </summary>
/// <param name="key">键值</param>
/// <returns>object</returns>
public virtual object GetObject(object key)
{
 if(_Cache.ContainsKey(key))
  return _Cache[key];
 return null;
}
/// <summary>
/// 把对象按指定的键值保存到缓存中
/// </summary>
/// <param name="key">键值</param>
/// <param name="value">保存的对象</param>
public void SaveCaech(object key,object value)
{
 EventSaveCache save = new EventSaveCache(SetCache);
 IAsyncResult ar = save.BeginInvoke(key,value,new System.AsyncCallback(Results),null);
}
private  void Results(IAsyncResult ar)
{
 EventSaveCache fd = (EventSaveCache)((AsyncResult)ar).AsyncDelegate;
 fd.EndInvoke(ar);
}
/// <summary>
/// 把对象按指定的键值保存到缓存中
/// </summary>
/// <param name="key">键值</param>
/// <param name="value">保存的对象</param>
protected virtual void SetCache(object key ,object value)
{
 lock(_LockObj)
 {
  if(!_Cache.ContainsKey(key))
   _Cache.Add(key,value);
 }
}
public int Count
{
 get
 {
  return _Cache.Count;
 }
}
/// <summary>
/// 在缓存中删除指定键值的对象
/// </summary>
/// <param name="key">键值</param>
public virtual void DelObject(object key)
{
 lock(_Cache.SyncRoot)
 {
  _Cache.Remove(key);
 }
}
/// <summary>
/// 清除缓存中所有对象
/// </summary>
public virtual void Clear()
{
 lock(_Cache.SyncRoot)
 {
  _Cache.Clear();
 }
}
}

/// <summary>
///针对一条记录操作命令的缓存类
/// </summary>
public class CachePersistentCommand:Cache
{
 
/// <summary>
/// 把记录操作命令缓存到内存中
/// </summary>
/// <param name="key">标识</param>
/// <param name="value">值</param>
protected override void SetCache(object key, object value)
{
 lock(_LockObj)
 {
  int count=0;
  if(Container.Config.CommandsCache.ContainsKey(key))
   count=(int) Container.Config.CommandsCache[key];
  System.Collections.IList _list;
  //如果缓存中已经存在这种命令的列表
  if(_Cache.ContainsKey(key))
  {
   _list = (System.Collections.IList)_Cache[key];
    
   if( count >0)//命令的缓存总数
   {
    if(_list.Count < count)//缓存数据量少于缓存总数
     _list.Add(value);
   }
   else
   {
    if(_list.Count < Container.Config.CommandBuffer)//缓存数小于组件的默认列表
     _list.Add(value);
   }
  }
  else//如果不存在列表
  {
   if(count >0 || Container.Config.CommandBuffer >0)//如果组件允许对象缓存
   {
    _list = new System.Collections.ArrayList();
    _list.Add(value);
    _Cache.Add(key,_list);
   }
  }
 }
}
/// <summary>
/// 从缓存中获取相关命令对象
/// </summary>
/// <param name="key">标识</param>
/// <returns>IPersistentCommand</returns>
public override object GetObject(object key)
{
  
 if(_Cache.Contains(key))//如果命令存在缓冲中
 {
  foreach(IPersistentCommand cmd in (System.Collections.IList)_Cache[key])
  {
   if(!cmd.State)//命令是否可以过行锁定
    if(cmd.Lock())//命令锁定
     return cmd;
  }
 }
 return null;
}


}
--------------------编程问答-------------------- 学习中。。。。 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 大家不要再发ASP.NET里面的几种缓存方法了

主要说不是这个问题

主要是缓存服务器、分布式缓存、缓存的更新以及更新依赖问题

--------------------编程问答-------------------- SQL 2005里有自带的缓存依赖的 --------------------编程问答-------------------- 不错,楼上的几位讲的不错! --------------------编程问答-------------------- nn --------------------编程问答-------------------- 关注,帮顶 --------------------编程问答-------------------- 醍醐灌頂~ --------------------编程问答-------------------- 学习中啊! --------------------编程问答-------------------- 学习ing --------------------编程问答-------------------- Memcached不错,底层是native代码。 有提供c/c++/php/java/.net的封装类库,而且支持多服务器集群。 唯一可惜的是没有见过什么大的。NET网站用他。 自己也没用过。只是比较感兴趣。

还有一个是csdn用的缓存机制 是一个叫heycacher的项目。 楼主搜一下。 我简单看过了一下。 他的分布式机制好象是用的tcp方式 --------------------编程问答-------------------- 呵呵  把MSDN 上的东东  往一下粘 就算完工了 

自己都不喜欢看的 让别人来看  有点意思 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 很深奥的问题,学习,帮顶! --------------------编程问答-------------------- 这方面很少研究,也很想了解下,关注中... --------------------编程问答-------------------- Learning --------------------编程问答-------------------- mark --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 我有个设想 能不能单独的脱离程序开辟一个缓存空间 然后单独管理呢提供写入和读取服务 --------------------编程问答-------------------- xuexu  mark --------------------编程问答-------------------- 学习,感谢楼主给这么一个好机会 --------------------编程问答-------------------- 关注! --------------------编程问答-------------------- Memcache好象是PHP用的。 --------------------编程问答-------------------- 楼主的这个问题蛮好,收藏了 --------------------编程问答-------------------- 帮顶! --------------------编程问答-------------------- 友情关注  大清早帮你顶上去 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- up --------------------编程问答-------------------- 缓存依赖要以来sql2005的broker --------------------编程问答-------------------- 不好意思,以来=依赖-。- --------------------编程问答-------------------- 我也学习一下,我们程序里开始用了些缓存,后来发现分布式就不太好同步,就干掉了许多 --------------------编程问答-------------------- up --------------------编程问答-------------------- 路过, 学习.
慢慢会懂的了. --------------------编程问答-------------------- good good study,day day up. --------------------编程问答-------------------- 关注一下 --------------------编程问答-------------------- mark --------------------编程问答-------------------- xx + sf --------------------编程问答-------------------- 缓存是为了提高性能,简单的三种缓存我就不说了,页面缓存,片断缓存,数据缓存书上都有,也很常用,我建议了为了提高性能可以从很多方面入手
如,线程,分布式,胖客户端,静态XML 等等

很多时候,我们不可能全都采用,看实际需要吧!

祝楼主一帆风顺 --------------------编程问答-------------------- up --------------------编程问答-------------------- 楼主很垃圾,看地出来-_-# --------------------编程问答-------------------- 学习学习!! --------------------编程问答-------------------- up~~~~~~~~~~~ --------------------编程问答-------------------- 文件依赖不要太多,服务器有一定压力时会有停顿的感觉,.net的页面缓存性能虽然好,但有时就因为这个而受拖累 --------------------编程问答-------------------- to  MicrosoftMessage(会开火箭的猪)

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DLOceanConnectionString %>"


我这里面DLOceanConnectionString 的就是他啊蛇呢没都没有写啊 --------------------编程问答-------------------- 学习ing!
--------------------编程问答-------------------- cache 一下只想到这个东西,
还是帮顶一下 --------------------编程问答-------------------- 好样的,给我2分 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 貌似来晚了啊,分还有吗
学习 --------------------编程问答-------------------- asp.net里如果是结合sql2000的话是基于时间轮询的缓存机制,如果是sql2005的话是基于回调的缓存机制。
大型分布式系统中没试过,学习下 --------------------编程问答-------------------- 我这里面DLOceanConnectionString 的就是他啊蛇呢没都没有写啊
--------------------
什么都没写你怎么连接数据库啊?晕死 --------------------编程问答-------------------- mark一下 慢慢看 --------------------编程问答-------------------- 学习!! ( 开源的基于ajax的可视化自定义web表单工具, 在: http://my5155.meibu.com ) --------------------编程问答-------------------- mark --------------------编程问答-------------------- 我这里面DLOceanConnectionString 的就是他啊蛇呢没都没有写啊
--------------------
应该写什么啊?
--------------------编程问答-------------------- MARK --------------------编程问答-------------------- 一点都看不明白啊! --------------------编程问答-------------------- 路过.. --------------------编程问答-------------------- 太高深了,学习....
MARK一下 --------------------编程问答-------------------- 缓存,有页面级的,也有内存级的。 --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- <%@ OutputCache Duration="3600" VaryByParam="None" Location="Any"%>
一个小时缓存时间 --------------------编程问答-------------------- 使用 BerkeleyDb  分布式实现 下一带缓存模式
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,