【发布时间】:2011-08-17 10:58:43
【问题描述】:
有什么方法可以通过一些实用程序来提高我的应用程序的性能?我正在使用 .Net framework 3.5 用 C# 编写应用程序,它是显示日志文件的应用程序,其中包含多行(它们是大约 200MB 的文本文件),它可以有 500MB RAM 内存和大约 10 秒的加载时间。我可以降低其中一些性能吗?当然,它可以通过更好的代码来完成,但我看到了 NGEN、GAC 的一些东西……这对我的应用程序也有帮助吗?谢谢
编辑
日志文件示例:
110331 052205 4969 [DB] fbba246f-bbe8-43b0-b8ca-f53bb90e8b51 Q SELECT GRAFIKON.ID,GRAFIKON.NADRAZENYGRAFIKONID,GRAFIKON.PLATNOSTOD,GRAFIKON.PLATNOSTDO,GRAFIKON.OBJEDNAVANIOD,GRAFIKON.OBJEDNAVANIDO,GRAFIKON.NAZEV,GRAFIKON.PROOBJEDNAVANI,GRAFIKON.ARCHIV,GRAFIKON.UZAVREN,GRAFIKON_0.Nazev,GRAFIKON_1.PlatnostOd FROM GRAFIKON LEFT OUTER JOIN GRAFIKON GRAFIKON_0 ON GRAFIKON.NADRAZENYGRAFIKONID = GRAFIKON_0.Id LEFT OUTER JOIN GRAFIKON GRAFIKON_1 ON GRAFIKON.NADRAZENYGRAFIKONID = GRAFIKON_1.Id WHERE (GRAFIKON.PROOBJEDNAVANI = 1)
110331 052205 6062 [DB] fbba246f-bbe8-43b0-b8ca-f53bb90e8b51 Q 0s 109ms
110331 052205 6375 [DB] acdbcdb6-aa3a-460a-a323-0be7c4512c14 Q SELECT NASTAVENI.ID,NASTAVENI.KLIC,NASTAVENI.HODNOTA,NASTAVENI.INFO,NASTAVENI.SKUPINA,NASTAVENI.TEXTAREA FROM NASTAVENI WHERE (NASTAVENI.KLIC = 'ARTICLE_AFTER_OPEN')
110331 052205 6688 [DB] acdbcdb6-aa3a-460a-a323-0be7c4512c14 Q 0s 31ms
110331 052205 7625 [DB] 9fd6ec6b-4844-44fe-8367-26c580ca8493 Q SELECT NASTAVENI.ID,NASTAVENI.KLIC,NASTAVENI.HODNOTA,NASTAVENI.INFO,NASTAVENI.SKUPINA,NASTAVENI.TEXTAREA FROM NASTAVENI WHERE (NASTAVENI.KLIC = 'GRAPHICON_CLOSED_SMS_TEXT')
110331 052205 7625 [DB] 9fd6ec6b-4844-44fe-8367-26c580ca8493 Q < 15ms
110331 065945 6813 [DB] 6387c3a4-33a5-4dfd-92d3-f4a8d00c910d Q SELECT GRAFIKON.ID,GRAFIKON.NADRAZENYGRAFIKONID,GRAFIKON.PLATNOSTOD,GRAFIKON.PLATNOSTDO,GRAFIKON.OBJEDNAVANIOD,GRAFIKON.OBJEDNAVANIDO,GRAFIKON.NAZEV,GRAFIKON.PROOBJEDNAVANI,GRAFIKON.ARCHIV,GRAFIKON.UZAVREN,GRAFIKON_0.Nazev,GRAFIKON_1.PlatnostOd FROM GRAFIKON LEFT OUTER JOIN GRAFIKON GRAFIKON_0 ON GRAFIKON.NADRAZENYGRAFIKONID = GRAFIKON_0.Id LEFT OUTER JOIN GRAFIKON GRAFIKON_1 ON GRAFIKON.NADRAZENYGRAFIKONID = GRAFIKON_1.Id WHERE (GRAFIKON.PROOBJEDNAVANI = 1)
110331 065945 7438 [DB] 6387c3a4-33a5-4dfd-92d3-f4a8d00c910d Q 0s 62ms
前12个数字是日期和时间(然后是ms我可以去掉),然后是模数,信息,Q作为查询,然后是下一个信息或时间执行需要多长时间。这是我的代码:
private Record GetRecordFromString(string strWithRecord)
{
Record newRecord = new Record();
try
{
if (strWithRecord.Length < 24)
{
newRecord.Prikaz = strWithRecord;
return newRecord;
}
if(!CheckIfFirstCharsAreDateTime(strWithRecord))
{
newRecord.Prikaz = strWithRecord;
return newRecord;
}
newRecord.Datum = ChangeDateFormat(strWithRecord.Substring(0, 6));
newRecord.Cas = ChangeTimeFormat(strWithRecord.Substring(7, 6));
strWithRecord = strWithRecord.Remove(0, 20);
int tempInt = strWithRecord.IndexOf(']');
newRecord.Modul = strWithRecord.Substring(0, tempInt);
strWithRecord = strWithRecord.Remove(0, tempInt + 2);
if (newRecord.Modul.StartsWith("DB"))
{
if (Char.IsUpper(strWithRecord[0]))
{
newRecord.Informace = strWithRecord;
}
else
{
tempInt = strWithRecord.IndexOf(' ');
newRecord.Informace = strWithRecord.Substring(0, tempInt);
strWithRecord = strWithRecord.Remove(0, tempInt + 1);
tempInt = strWithRecord.IndexOf(' ');
newRecord.Priznak = strWithRecord.Substring(0, tempInt);
strWithRecord = strWithRecord.Remove(0, tempInt + 1);
newRecord.Prikaz = strWithRecord;
}
}
else
{
newRecord.Informace = strWithRecord;
}
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
return newRecord;
}
private bool CheckIfFirstCharsAreDateTime(string stringToCheck)
{
if (!Char.IsNumber(stringToCheck[0]) || !Char.IsNumber(stringToCheck[1]) || !Char.IsNumber(stringToCheck[2]) || !Char.IsNumber(stringToCheck[3]) || !Char.IsNumber(stringToCheck[4]) || !Char.IsNumber(stringToCheck[5]) || !Char.IsWhiteSpace(stringToCheck[6]) || !Char.IsNumber(stringToCheck[7]) || !Char.IsNumber(stringToCheck[8]) || !Char.IsNumber(stringToCheck[9]) || !Char.IsNumber(stringToCheck[10]) || !Char.IsNumber(stringToCheck[11]) || !Char.IsNumber(stringToCheck[12]))
{
return false;
}
return true;
}
private string ChangeDateFormat(string strWithDate)
{
try
{
if (String.IsNullOrEmpty(strWithDate))
return "";
char[] arrayOfChars = strWithDate.ToCharArray();
strWithDate = arrayOfChars[4].ToString() + arrayOfChars[5].ToString() + "." + arrayOfChars[2].ToString() + arrayOfChars[3].ToString() + ".20" + arrayOfChars[0].ToString() + arrayOfChars[1].ToString();
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
return strWithDate;
}
private string ChangeTimeFormat(string strWithTime)
{
if (String.IsNullOrEmpty(strWithTime))
return "";
strWithTime = strWithTime.Insert(2, ":");
strWithTime = strWithTime.Insert(5, ":");
return strWithTime;
}
编辑2 Profiler file
【问题讨论】:
标签: c# visual-studio-2008 .net-3.5