我有一个程序是在不停地写LOG文件 log是每天更新的,例如20140109.log、20140110.log
大小大概是400M每天,我要获取里面实时更新的数据,本来我是想读一行删一行的,可是由于另一个程序正在使用,不能删除。我又想到读取每一行,将需要的信息筛选出来记录在数据库中,并将读取到哪一行记录在配置文件中
public List<Msg> GetLogLines() { List<Msg> msglist = new List<Msg>(); string datet = DateTime.Now.ToShortDateString(); string date=DateTime.Now.ToString("yyyyMMdd"); string logpath = LogPath + "\\" + date + ".log"; //string[] strs = File.ReadAllLines(logpath, Encoding.Default); FileStream fs = new FileStream(logpath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader sr = new StreamReader(fs, Encoding.Default); string[] strs = sr.ReadToEnd().Replace("\r\n", "\r").Split('\r'); fs.Dispose(); sr.Dispose(); StringBuilder sb=new StringBuilder(255); CtrlIni.GetPrivateProfileString("LastRecordLine", "LastRecordLine", "0", sb, 255, IniPath); int StartLine = Convert.ToInt32(sb.ToString()); for (int i = StartLine; i < strs.Length; i++) { if (strs[i].Contains("user_number[0]")) { CtrlIni.WritePrivateProfileString("LastRecordLine", "LastRecordLine", (i + 1).ToString(), IniPath); Msg msg = new Msg(); msg.Msg_Phone = strs[i].Substring(30, 11); if (i + 16 < strs.Length) { msg.Msg_Content = strs[i + 16].Substring(28); msg.Msg_State = 0; msg.Msg_Time = DateTime.Now; msglist.Add(msg); continue; } } } //File.Delete(logpath); //File.Create(logpath); return msglist; }
string[] strs = sr.ReadToEnd().Replace("\r\n", "\r").Split('\r');
是这里抛出..
程序运行的时候直接用掉800M的内存
异常是 msglist.Add(msg); 抛出的吗?
string[] strs = sr.ReadToEnd().Replace("\r\n", "\r").Split('\r');
是这里抛出..
@.F.: 改成 sr.ReadLine
@Launcher: 怎么记录下读到第几行了呢?
@.F.: int count = 0;
while(sr.ReadLine) count++;
@Launcher:没有readline这个属性啊
@Launcher: 恩 就用这个了 谢谢哈
假设你这个文件是400M
sr.ReadToEnd()400M没了
sr.ReadToEnd().Replace("\r\n", "\r")又是400M没了
sr.ReadToEnd().Replace("\r\n", "\r").Split('\r')又是400M没了
修改一个字符串的时候原字符串不会发生变化会另外创建一个结果字符串
你干嘛不一行一行的读
这样貌似蛮适合我的
这样使用,内存伤不起啊~
直接使用: string[] strs = System.IO.File.ReadAllLines("文件路径");吧
这样会省一点 但是 还是好伤不起...
对于楼主的解决思路有疑义:
(1)记日志为何不用log4net?可以写文件,也可以直接记入数据库
(2)如果log文件是记录数据字段的变化,可以试试CDC:http://www.cnblogs.com/downmoon/archive/2012/04/09/2439462.html
记录日志是别人写好的程序...