Хорошо, я собираюсь перечислить объекты моего программного обеспечения. В настоящее время использование памяти увеличивается с течением времени, хотя не должно увеличиваться, потому что я не сохраняю никаких ресурсов. Использование только базы данных.
c # 4.0, visual studio 2010
Давайте начнем с объектов. На этих объектах я должен вызывать dispose или использовать «using»
string variable;
int variable;
dataset variable;
HtmlDocument variable;
List<string> variable;
HtmlNode variable;
Uri variable;
DateTime variable;
HtmlWeb variable;
Regex variable;
MatchCollection variable;
bool variable;
фрагмент кода (все, что требуется после метода File.WriteAllText?)
File.WriteAllText("hatalar/" + UtcTimeNow.Ticks.ToString() + GenerateRandomValue.GenerateRandomValueDefault(10000000) + ".txt", srCrawledUrl + " unknown error page id " + srPageId);
часть кода
if (irFinishedLast > -1)
{
var newTask = Task.Factory.StartNew(() =>
{
fcStartSubPageCrawl(srMainSiteURL, srMainSiteId, irWhichMainTask);
});
lock (lockerMainSitesArray)
{
if (MainSitesTaskList[irWhichMainTask, irFinishedLast] != null)
MainSitesTaskList[irWhichMainTask, irFinishedLast].Dispose();
MainSitesTaskList[irWhichMainTask, irFinishedLast] = newTask;
}
}
Хорошо, теперь классы и функции. Открытая статическая функция, которая вызывается многими потоками одновременно. Он находится внутри публичного статического класса.
public static string srInserIntoPagesCommand = "insert into myTable (PageUrl,MainSiteId,CrawlDateInt,CrawlDateChar,CrawlDepth,ExtractedPageId,CrawlStatus) values " +
"(@PageUrl,@MainSiteId,@CrawlDateInt,@CrawlDateChar,@CrawlDepth,@ExtractedPageId,@CrawlStatus)";
public static bool InsertIntoPages(string PageUrl, string MainSiteId, string CrawlDateInt, string CrawlDateChar, string CrawlDepth, string ExtractedPageId, string CrawlStatus)
{
string srPageUrl = PageUrl;
string srMainSiteId = MainSiteId;
string srCrawlDateInt = CrawlDateInt;
string srCrawlDateChar = CrawlDateChar;
string srCrawlDepth = CrawlDepth;
string srExtractedPageId = ExtractedPageId;
string srCrawlStatus = CrawlStatus;
if (srCrawlDateInt.Length < 1)
srCrawlDateInt = "0";
if (srCrawlDateChar.Length < 1)
srCrawlDateChar = "null";
if (srCrawlStatus.Length < 1)
srCrawlStatus = "0";
using (SqlConnection connection = new SqlConnection(DbConnection.srConnectionString))
{
using (SqlCommand cmd = new SqlCommand(srInserIntoPagesCommand, connection))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@PageUrl", srPageUrl);
cmd.Parameters.AddWithValue("@MainSiteId", srMainSiteId);
cmd.Parameters.AddWithValue("@CrawlDateInt", srCrawlDateInt);
cmd.Parameters.AddWithValue("@CrawlDateChar", srCrawlDateChar);
cmd.Parameters.AddWithValue("@CrawlDepth", srCrawlDepth);
cmd.Parameters.AddWithValue("@ExtractedPageId", srExtractedPageId);
cmd.Parameters.AddWithValue("@CrawlStatus", srCrawlStatus);
try
{
connection.Open();
cmd.ExecuteNonQuery();
}
catch (Exception E)
{
DateTime UtcTimeNow = DateTime.UtcNow;
File.WriteAllText("pageshatalar/" + UtcTimeNow.Ticks.ToString() + GenerateRandomValue.GenerateRandomValueDefault(1000000) + ".txt", "InsertIntoPages \r\n\r\n" + E.Message.ToString() + "\r\n\r\n" + srPageUrl);
return false;
}
}
connection.Close();
}
return true;
}
публичная статическая связь с базой данных для запросов на выборку, в основном внутри публичного статического класса
public static string srConnectionString = "server=localhost;database=mydb;uid=sa;pwd=mypw; Max Pool Size=20000; Pooling=True;";
public static DataSet db_Select_Query(string strQuery)
{
DataSet dSet = new DataSet();
try
{
using (SqlConnection connection = new SqlConnection(srConnectionString))
{
connection.Open();
using (SqlDataAdapter DA = new SqlDataAdapter(strQuery, connection))
{
DA.Fill(dSet);
}
connection.Close();
}
return dSet;
}
catch
{
DateTime UtcTimeNow = DateTime.UtcNow;
File.WriteAllText("sqlhatalar/" + UtcTimeNow.Ticks.ToString() + GenerateRandomValue.GenerateRandomValueDefault(1000000) + ".txt", strQuery);
return null;
}
}