Базы данных для карманного персонального компьютера

Скорость загрузки текстового файла

Разбить на страницы
Показывать лекцию целиком

Задача темы: изучить методику и получить навыки в разработке тестового приложения побайтовой и посимвольной загрузки и вывода содержания текстового файла в форму для просмотра и оценки скорости этих процессов.

Разработка: Приложение "Viewer" для просмотра содержания и оценки скорости загрузки текстовых файлов.

Состав выполняемых функций:

  • Файловые операции: открыть, закрыть
  • Алгоритмы: подсчет времени загрузки и вывода файла для просмотра
  • Информационно-справочные: О программе
  • Наращивание функциональности не предусматривается.

    Защита – модификация данных не предусматривается.

    В качестве входных данных используется любые текстовые файлы. Выходные данные программы – графическое отображение результатов в ListBox, ProgressBar и MessageBox о вычисленной продолжительности загрузки и вывода информации для SmartDevice.

    Шаг 1. Разработка графического интерфейса

    Используется только одна форма Form1. В форме располагается listBox для вывода содержимого текстового файла и ProgressBar для индикации скорости загрузки, для которого изначально устанавливается свойство Visible=False.

    (рис 4.1) Примерный дизайн – элемент ProgressBar невидим.

    В дизайнере формы устанавливаются также невидимые элементы – mainMenu с тремя опциями (Посимвольный вывод; Побайтовый вывод; Выход), openFileDialog и timer для подсчета времени загрузки файла и вывода его содержимого в Листбокс. Примерный дизайн формы приведен на рис.4.1.

    Шаг 2. Расширяем состав библиотек формы 1

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data;
    //Добавляем библиотеки работы с файлами и регулярными выражениями
    using System.IO;
    using System.Text.RegularExpressions;

    Шаг.3 Создаем процедуру автозагрузки данных в форму

    Начнем с вывода информации "О программе" в listBox1.

    private void Form1_Load (object sender, System.EventArgs e) {
    listBox1.Items.Add("   О программе");
    listBox1.Items.Add("");
    listBox1.Items.Add(" Используя конструкцию записи строки");
    listBox1.Items.Add(" listBox1. Items. Add (S), где:");
    listBox1.Items.Add(" S-переменная,содержащая текст строки");
    listBox1.Items.Add(" файла, создайте программу просмотра");
    listBox1.Items.Add(" содержимого файла");
    listBox1.Items.Add("");
    listBox1.Items.Add(" (C)Родигин Л.А., 2006");
    listBox1.Items.Add(" C#,Платформа VisualStudio NET, 2003");
    }

    Шаг 4. Создаем процедуру посимвольной загрузки файла

    //символьный вывод
    private void menuItem1_Click(object sender, System.EventArgs e) {
    string file_name="*.*"; // шаблон имен файлов – все типы
    if (openFileDialog1.ShowDialog()==DialogResult.OK) {
    	file_name=openFileDialog1.FileName;
    	}
    else {return;} // если файл не выбираем, то возврат в вызывающую программу
    FileStream fin; // если файл выбрали, то определяем переменную потока
    try {открываем файл
    fin=new FileStream(file_name,FileMode.Open);
    	}
    catch(IOException exc) {если файл недоступен
    MessageBox.Show ("Невозможно открыть файл \n"+file_name,"Ошибка");
    return;}
    long L=fin.Length; // вычисляем длину файла (мусор?)
    // Считываем значения из файла
    StreamReader fstr_in=new StreamReader(fin);
    //в переменную считываются все символы, пока не кончится строка
    string sc="0"; // загружаемая из файла строка 
    int P=1; // начальное деление линейки progressBar
    int s=0; // число символов в строке
    progressBar1.Visible=true; // показываем progressBar
    listBox1.Items.Clear();
    // вычиcляем число строк в файле
    long T;
    timer1.Enabled=true; // запускаем таймер
    T=DateTime.Now.Ticks; // фиксируем время старта таймера
    while((sc=fstr_in.ReadLine())!=null) {	
    	s=s+sc.Length;
    	listBox1.Items.Add(sc); //добавляем строку в листбокс
    // progressBar рассчитан на 100 делений, поэтому вычисляем цену деления
    	if (P*(int)L/100<=s) {
    	P=P+1;
    	progressBar1.Value=P-1;
    		}
    	}
    fstr_in.Close(); // закрываем поток и выводим сообщение с результатами
    MessageBox.Show((DateTime.Now.Ticks-T).ToString(),"Время загрузки");
    timer1.Enabled=false; // выгружаем из памяти таймер
    progressBar1.Visible=false; // прячем progreassBar
    return; // возвращаемся в программу	
    }

    Шаг 5. Создаем процедуру побайтовой загрузки файла

    // побайтовый вывод
    private void menuItem2_Click(object sender, System.EventArgs e) {
    string file_name="*.*";
    if (openFileDialog1.ShowDialog()==DialogResult.OK) {
    	file_name=openFileDialog1.FileName;
    	}
    else {	return;}		
    FileStream fin;
    try {
    fin =new FileStream(file_name,FileMode.Open); 
    	}
    // набор catch для одного try 
    catch(FileNotFoundException exc){// если файл не найден
    MessageBox.Show(file_name,"Файл не найден");
    return;}
    catch(IndexOutOfRangeException exc){// если файл не доступен
    MessageBox.Show(file_name,"Файл не доступен");
    return;}
    long L=fin.Length;
    int i;
    
    int P=1;
    listBox1.Items.Clear();
    // читаем байты
    int s=0;
    char ch=' ';
    string sc="";
    // считаем время
    timer1.Enabled=true; // запускаем таймер
    long T=DateTime.Now.Ticks; // фиксируем время начальной загрузки
    do {// открываем цикл считывания
    try{
    	i=fin.ReadByte(); // открываем файл для чтения
    	}
    	catch(IOException exc){
    	return;
    	}
    // если поток существует	
    	progressBar1.Visible=true;
    	if(i!=1)
    	{// итератор 
    	s=s+1;
    	ch=(char)i;
    	sc=sc+((char)i).ToString();
    		if (ch = = '\n') {
    		listBox1.Items.Add(sc);
    		sc="";
    		}
    //Кратно 100
    	if (P*(int)L/100==s) {
    		P=P+1;
    		progressBar1.Value=P-1;
    		}
    	}
    }
    // если поток закончился
    while(i!=-1);
    fin.Close();
    MessageBox.Show((DateTime.Now.Ticks-T).ToString(),"Время загрузки");
    timer1.Enabled=false;
    progressBar1.Visible=false;
    }

    Шаг 6. Выход из программы

    private void menuItem5_Click(object sender, System.EventArgs e) {
    Application.Exit();
    }

    Вопрос: Что же быстрее, побайтовый вывод или посимвольный?

    Страницы:

    Задача темы: изучить методику и получить навыки в разработке тестового приложения побайтовой и посимвольной загрузки и вывода содержания текстового файла в форму для просмотра и оценки скорости этих процессов.

    Разработка: Приложение "Viewer" для просмотра содержания и оценки скорости загрузки текстовых файлов.

    Состав выполняемых функций:

  • Файловые операции: открыть, закрыть
  • Алгоритмы: подсчет времени загрузки и вывода файла для просмотра
  • Информационно-справочные: О программе
  • Наращивание функциональности не предусматривается.

    Защита – модификация данных не предусматривается.

    В качестве входных данных используется любые текстовые файлы. Выходные данные программы – графическое отображение результатов в ListBox, ProgressBar и MessageBox о вычисленной продолжительности загрузки и вывода информации для SmartDevice.

    Шаг 1. Разработка графического интерфейса

    Используется только одна форма Form1. В форме располагается listBox для вывода содержимого текстового файла и ProgressBar для индикации скорости загрузки, для которого изначально устанавливается свойство Visible=False.

    (рис 4.1) Примерный дизайн – элемент ProgressBar невидим.

    В дизайнере формы устанавливаются также невидимые элементы – mainMenu с тремя опциями (Посимвольный вывод; Побайтовый вывод; Выход), openFileDialog и timer для подсчета времени загрузки файла и вывода его содержимого в Листбокс. Примерный дизайн формы приведен на рис.4.1.

    Шаг 2. Расширяем состав библиотек формы 1

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data;
    //Добавляем библиотеки работы с файлами и регулярными выражениями
    using System.IO;
    using System.Text.RegularExpressions;

    Шаг.3 Создаем процедуру автозагрузки данных в форму

    Начнем с вывода информации "О программе" в listBox1.

    private void Form1_Load (object sender, System.EventArgs e) {
    listBox1.Items.Add("   О программе");
    listBox1.Items.Add("");
    listBox1.Items.Add(" Используя конструкцию записи строки");
    listBox1.Items.Add(" listBox1. Items. Add (S), где:");
    listBox1.Items.Add(" S-переменная,содержащая текст строки");
    listBox1.Items.Add(" файла, создайте программу просмотра");
    listBox1.Items.Add(" содержимого файла");
    listBox1.Items.Add("");
    listBox1.Items.Add(" (C)Родигин Л.А., 2006");
    listBox1.Items.Add(" C#,Платформа VisualStudio NET, 2003");
    }

    Шаг 4. Создаем процедуру посимвольной загрузки файла

    //символьный вывод
    private void menuItem1_Click(object sender, System.EventArgs e) {
    string file_name="*.*"; // шаблон имен файлов – все типы
    if (openFileDialog1.ShowDialog()==DialogResult.OK) {
    	file_name=openFileDialog1.FileName;
    	}
    else {return;} // если файл не выбираем, то возврат в вызывающую программу
    FileStream fin; // если файл выбрали, то определяем переменную потока
    try {открываем файл
    fin=new FileStream(file_name,FileMode.Open);
    	}
    catch(IOException exc) {если файл недоступен
    MessageBox.Show ("Невозможно открыть файл \n"+file_name,"Ошибка");
    return;}
    long L=fin.Length; // вычисляем длину файла (мусор?)
    // Считываем значения из файла
    StreamReader fstr_in=new StreamReader(fin);
    //в переменную считываются все символы, пока не кончится строка
    string sc="0"; // загружаемая из файла строка 
    int P=1; // начальное деление линейки progressBar
    int s=0; // число символов в строке
    progressBar1.Visible=true; // показываем progressBar
    listBox1.Items.Clear();
    // вычиcляем число строк в файле
    long T;
    timer1.Enabled=true; // запускаем таймер
    T=DateTime.Now.Ticks; // фиксируем время старта таймера
    while((sc=fstr_in.ReadLine())!=null) {	
    	s=s+sc.Length;
    	listBox1.Items.Add(sc); //добавляем строку в листбокс
    // progressBar рассчитан на 100 делений, поэтому вычисляем цену деления
    	if (P*(int)L/100<=s) {
    	P=P+1;
    	progressBar1.Value=P-1;
    		}
    	}
    fstr_in.Close(); // закрываем поток и выводим сообщение с результатами
    MessageBox.Show((DateTime.Now.Ticks-T).ToString(),"Время загрузки");
    timer1.Enabled=false; // выгружаем из памяти таймер
    progressBar1.Visible=false; // прячем progreassBar
    return; // возвращаемся в программу	
    }

    Шаг 5. Создаем процедуру побайтовой загрузки файла

    // побайтовый вывод
    private void menuItem2_Click(object sender, System.EventArgs e) {
    string file_name="*.*";
    if (openFileDialog1.ShowDialog()==DialogResult.OK) {
    	file_name=openFileDialog1.FileName;
    	}
    else {	return;}		
    FileStream fin;
    try {
    fin =new FileStream(file_name,FileMode.Open); 
    	}
    // набор catch для одного try 
    catch(FileNotFoundException exc){// если файл не найден
    MessageBox.Show(file_name,"Файл не найден");
    return;}
    catch(IndexOutOfRangeException exc){// если файл не доступен
    MessageBox.Show(file_name,"Файл не доступен");
    return;}
    long L=fin.Length;
    int i;
    
    int P=1;
    listBox1.Items.Clear();
    // читаем байты
    int s=0;
    char ch=' ';
    string sc="";
    // считаем время
    timer1.Enabled=true; // запускаем таймер
    long T=DateTime.Now.Ticks; // фиксируем время начальной загрузки
    do {// открываем цикл считывания
    try{
    	i=fin.ReadByte(); // открываем файл для чтения
    	}
    	catch(IOException exc){
    	return;
    	}
    // если поток существует	
    	progressBar1.Visible=true;
    	if(i!=1)
    	{// итератор 
    	s=s+1;
    	ch=(char)i;
    	sc=sc+((char)i).ToString();
    		if (ch = = '\n') {
    		listBox1.Items.Add(sc);
    		sc="";
    		}
    //Кратно 100
    	if (P*(int)L/100==s) {
    		P=P+1;
    		progressBar1.Value=P-1;
    		}
    	}
    }
    // если поток закончился
    while(i!=-1);
    fin.Close();
    MessageBox.Show((DateTime.Now.Ticks-T).ToString(),"Время загрузки");
    timer1.Enabled=false;
    progressBar1.Visible=false;
    }

    Шаг 6. Выход из программы

    private void menuItem5_Click(object sender, System.EventArgs e) {
    Application.Exit();
    }

    Вопрос: Что же быстрее, побайтовый вывод или посимвольный?

    Вернуться к учебному плану