Помогите ускорить работу с событиями!
От: Deleter  
Дата: 21.03.06 05:26
Оценка:
Нужно из журнала событий Безопсаность винды загружать события входа и выхода в LIstView. Но так как написал я это происходит очень медленно. Может кто поможет!
Я это сделал так:
/// <summary>
        /// Поиск сообщения выхода пользователя
        /// </summary>
        /// <param name="index">Номер события</param>
        /// <param name="user">Имя пользователя</param>
        /// <returns></returns>
        private string findLogOut(int index, string user)
        {
            EventLog evLog = new EventLog("Security");
            EventLogEntryCollection evLogCol = evLog.Entries;
            
            string[] userSpl;

            int numEnt = evLogCol.Count;
            for(int i = 0; i < numEnt; i++)
            {
                if(evLogCol[i].UserName != "")
                {
                    if(evLogCol[i].UserName != null)
                    {
                        userSpl = evLogCol[i].UserName.Split('\\');
                        if(userSpl[1] == user)
                        {
                            if(evLogCol[i].EventID == 551 & evLogCol[i].Index > index)
                            {
                                return evLogCol[i].TimeGenerated.ToLongTimeString()+'|'+evLogCol[i].TimeGenerated.ToShortDateString();
                            }
                        }
                    }
                }
                else
                {
                }
                
            }
            return "error|error";
        }
        /// <summary>
        /// Заполнение по дате
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        private void fillByDate(string start, string end)
        {
            lv_events.Items.Clear();

            EventLog evLog = new EventLog("Security");
            EventLogEntryCollection evLogCol = evLog.Entries;
            string logOut = "";
            string[] user, outTime;
            int curItem = 0;
            DateTime dtSt = Convert.ToDateTime(start);
            DateTime dtEnd = Convert.ToDateTime(end);


            int numEnt = evLogCol.Count;
            for(int i = 0; i < numEnt; i++)
            {
                if(DateTime.Compare(dtSt,evLogCol[i].TimeGenerated.Date) >= 0)
                {
                    if(DateTime.Compare(dtEnd, evLogCol[i].TimeGenerated.Date) <= 0)
                    {
                        if(evLogCol[i].EventID == 528)
                        {
                            lv_events.Items.Add(evLogCol[i].TimeGenerated.ToLongTimeString());
                            curItem = lv_events.Items.Count - 1;
                            lv_events.Items[curItem].SubItems.Add(evLogCol[i].TimeGenerated.ToShortDateString());
                    
                            user = evLogCol[i].UserName.Split('\\');
                            logOut = findLogOut(evLogCol[i].Index, user[1]);
                            outTime = logOut.Split('|');

                            lv_events.Items[curItem].SubItems.Add(outTime[0].ToString());
                            lv_events.Items[curItem].SubItems.Add(outTime[1].ToString());
                            lv_events.Items[curItem].SubItems.Add(user[1]);
                            lv_events.Items[curItem].SubItems.Add(user[0]);
                        }
                    }
                }
            }
        }
            ///ТУт ListView заполняем всеми событиями!
        private void fillAll()
        {
            EventLog evLog = new EventLog("Security");
            EventLogEntryCollection evLogCol = evLog.Entries;
            string logOut = "";
            string[] user = new string[2];
            string[] outTime = new string[2]; 
            int curItem = 0;

            int numEnt = evLogCol.Count;
            for(int i = 0; i < numEnt; i++)
            {
                if(evLogCol[i].EventID == 528)
                {
                    lv_events.Items.Add(evLogCol[i].TimeGenerated.ToLongTimeString());
                    curItem = lv_events.Items.Count - 1;
                    lv_events.Items[curItem].SubItems.Add(evLogCol[i].TimeGenerated.ToShortDateString());
                    
                    if(evLogCol[i].UserName != "")
                    {
                        if(evLogCol[i].UserName != null)
                        {
                            user = evLogCol[i].UserName.Split('\\');
                            logOut = findLogOut(evLogCol[i].Index, user[1]);
                            outTime = logOut.Split('|');
                        }
                    }
                    else
                    {
                        outTime[0] = "error";
                        outTime[1] = "error";
                        user[0] = "NULL";
                        user[1] = "NULL";
                    }
                    

                    lv_events.Items[curItem].SubItems.Add(outTime[0].ToString());
                    lv_events.Items[curItem].SubItems.Add(outTime[1].ToString());
                    lv_events.Items[curItem].SubItems.Add(user[1]);
                    lv_events.Items[curItem].SubItems.Add(user[0]);
                }
            }
        }



21.03.06 10:45: Перенесено модератором из '.NET' — TK
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.