我跑在我的asp.net web服务应用程序在后台线程。 该线程的责任是在特定的时间后,打的数据库和更新缓存的DataTable。 数据表有大约50万行。 在任务管理器,当我在看的过程中,第一次web开发服务器消耗的下一次围绕300,000K它去500,000K,有些时候它达到高于1,000,000K有时回落到500,000-600,000K。 正如我在我的本地机器上做的工作,以便在数据库中的数据并没有改变。 任何人都可以请指导我我在做什么错误的代码:
protected void Application_Start(object sender, EventArgs e)
{
Thread obj = new Thread(new ThreadStart(AddDataInCache));
obj.IsBackground = true;
obj.Start();
}
private void AddDataInCache()
{
Int32 iCount = 0;
while (true)
{
MyCollection _myCollection = new MyCollection();
DataTable dtReferences = null;
DataTable dtMainData = null;
try
{
dtMainData = _myCollection.GetAllDataForCaching(ref dtReferences);
HttpRuntime.Cache.Insert("DATA_ALL_CACHING", dtMainData, null,
Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
CacheItemPriority.Default, null);
HttpRuntime.Cache.Insert("DATA_REFERENCES_CACHING", dtReferences, null,
Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable, null
);
}
catch (Exception ex)
{
}
finally
{
if (_myCollection != null)
_myCollection = null;
}
iCount++;
Thread.Sleep(18000);
}
}
在GetAllDataForCaching
我得到一个SqlDataReader
从我的数据访问层:
public DataTable GetAllDataForCaching(ref DataTable dReferenceTable)
{
DataTable dtReturn = new DataTable();
SqlDataReader dReader = null;
try
{
dReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "[GetDataForCaching]", null);
if (dReader != null && dReader.HasRows)
{
dtReturn.Load(dReader);
dReferenceTable = new DataTable();
if (dReader.HasRows)
{
DataTable dtSchema = dReader.GetSchemaTable();
List<DataColumn> listCols = new List<DataColumn>();
if (dtSchema != null)
{
foreach (DataRow drow in dtSchema.Rows)
{
string columnName = System.Convert.ToString(drow["ColumnName"]);
DataColumn column = new DataColumn(columnName, (Type)(drow["DataType"]));
column.Unique = (bool)drow["IsUnique"];
column.AllowDBNull = (bool)drow["AllowDBNull"];
column.AutoIncrement = (bool)drow["IsAutoIncrement"];
listCols.Add(column);
dReferenceTable.Columns.Add(column);
}
}
while (dReader.Read())
{
DataRow dataRow = dReferenceTable.NewRow();
for (int i = 0; i < listCols.Count; i++)
{
dataRow[((DataColumn)listCols[i])] = dReader[i];
}
dReferenceTable.Rows.Add(dataRow);
}
}
}
}
finally
{
if (dReader != null)
{
if (dReader.IsClosed == false)
dReader.Close();
dReader = null;
}
}
return dtReturn;
}
我使用Visual Studio 2008。