2015-11-04 2 views
0

У меня возник вопрос: я работаю над ASP.Net Web Forms и C# app, и я использую gridView для отображения данных из таблицы, поэтому я решил кэшировать.Различия между SqlDependency и SqlCacheDependency

Я сделал

aspnet_regsql -ed -E -d Store 
aspnet_regsql -et -E -d Store-t Customers 

и изменения в web.config:

<caching> 
     <sqlCacheDependency pollTime="2000" enabled="true"> 
     <databases> 
      <add name="Store" connectionStringName="StoreConnectionString"/> 
     </databases> 
     </sqlCacheDependency> 
    </caching> 

Но теперь я должен решить, если использовать SqlDependency

<%@ OutputCache Duration=”600″ SqlDependency=”Store:Customers” VaryByParam=”none” %> 

Или использовать SqlCacheDependency

private void BindData() { 
    if (Cache["Users"] == null) {    
     SqlCacheDependency dep = new SqlCacheDependency("Store", "Customers"); 
     string connectionString = ConfigurationManager.ConnectionStrings[ 
             "ConnectionString"].ConnectionString; 
     SqlConnection myConnection = new SqlConnection(connectionString); 
     SqlDataAdapter ad = new SqlDataAdapter("SELECT FirstName, LastName " + 
               "FROM Users", myConnection); 
     DataSet ds = new DataSet(); 
     ad.Fill(ds); 
     Cache.Insert("Cust", ds, dep); 
    } 
    gvUsers.DataSource = Cache["Cust"] as DataSet; 
    gvUsers.DataBind(); 
} 

Не могли бы вы рассказать мне, в чем разница между SqlDependency и SqlCacheDependency и какой из них лучше для моего кода, пожалуйста?

ответ

0

SqlDependency, скорее всего, будет использовать в директиве страницы как свойство для outputcache, наиболее важным аспектом является то, что вы должны указать строку соединения в Web.config (как вы можете знать, что это угроза безопасности), а также использовать атрибут polltime в теге.

SqlCacheDependency - это класс, и вам нужно будет указать данные, которые нужно добавить в кеш через cache.insert или cache.add, вам не нужно указывать строку соединения в Web.config, но, возможно, вы будете скорее всего, использование SERVICE_BROKER вместо aspnet_regsql и, кроме того, если вы решили использовать SERVICE_BROKER забудьте добавить global.asax для того, чтобы указать:

Application_start(){ 
string connectionString = yourdatabaseconnection; 
    System.Data.SqlClient.SqlDependency.Start(connectionString); 
} 

и App_end()

Application_end(){ 
string connectionString = yourdatabaseconnection; 
    System.Data.SqlClient.SqlDependency.Stop(connectionString); 
} 

так как я уже использовать команду aspnet_regsql, я бы предположил, что u se outputchache и SqlDependency, но с большим временем опроса, но моей последней рекомендацией было бы использовать SqlCacheDependency и включить SERVICE_BROKER через

ALTER DATABASE testdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE 
Смежные вопросы