Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

файлы и их открытие

Posted on 26 Февраль, 201326 Февраль, 2013 by admin

Откройте и прочтите 100 файлов по 1500 символов каждый. Откройте и прочтите один файл содержащий 150000 символов. Есть ли разница во времени выполнения задач? Каково наибольшее число файлов которое можно одновременно открыть в вашей системе? Рассмотрите этот вопрос касательно использования включаемых файлов.

Ок. Для начала нам нужно создать 100 файлов по 1500 символов каждый. Напишем код генерирующий 100 файлов.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int main()
{
    int count=0;
    cout <<endl<<strNum(count)<<endl;
    for(int i=0;i<100;i++)
    {
        string name="z"+strNum(count);
        name+=".dat";
        cout <<name<<endl;
        count++;
        ofstream w(name.data(),ios::out);
        if(!w)
        {
            cerr <<"don't open file"<<endl;
            exit(1);
        }
        //zapic6 v fail
        srand(time(0));//zacevaem generator
        for(int i=0;i<1500;i++)
        {
            w <<(char)(32+rand()%93);
        }
        w.close();
    }
    //generaci9 15 raznux ctrok
 
    return 0;
}

Все создали. Дальше откроем и прочитаем эти 100 файлов по 1500 символов пишем програмку:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//otkruvaem i chitaem failu
int count=0;
for(int i=0;i<100;i++)
{
string name="z"+strNum(count);
name+=".dat";
cout <<name<<endl;
++count;
ifstream r(name.data(),ios::in);
if(!r)
{
cerr <<"don't open file"<<endl;
exit(1);//zaverwit6 programmy c kodom vozvrata 1
}
 
string text="";
char c;
while(r.get(c))
{
text+=c;
}
 
//cout <<text<<endl;
//exit(1);
}

Как мы видим С++ очень быстро это делает буквально за секунду.

Дальше генерируем файл на полторы тысячи символов

код генератора:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        //gen file na 150000 c
string name="poltoru.dat";
ofstream w(name.data(),ios::out);
if(!w)
{
cerr <<"don't open file"<<endl;
exit(1);
}
//zapic6 v fail
srand(time(0));//zacevaem generator
for(int i=0;i<150000;i++)
{
w <<(char)(32+rand()%93);
}
w.close();

теперь попробуем его открыть и прочитать.

Пишем код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//prochitat6 na 150000
string name="poltoru.dat";
ifstream r(name.data(),ios::in);
if(!r)
{
cerr <<"don't open file"<<endl;
exit(1);//zaverwit6 programmy c kodom vozvrata 1
}
 
string text="";
char c;
while(r.get(c))
{
text+=c;
}
r.close();
//cout <<text<<endl;

Честно сказать я разницы не заметил между открытием и прочтением 100 файлов по 1500 строк и одного файла 150000 строк, на глаз оно не заметно, быстро очень прочитало буквально за секунду, как в первом случае так и во втором.

Вылаживаю полный листинг программы:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//programma otrkruti9 failov
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
using std::ios;
using std::cerr;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <cstdlib>
using std::exit;
using std::srand;
using std::rand;
#include <ctime>
using std::time;
#include <string>
using std::string;
 
//perevod chicla v ctroky int
string strNum(int n)
{
string s="";
if(n==0)
s="0";
int mass[13]={0};
for(int i=0;n!=0;n=n/10,i++)
{
int r=n%10;
//cout <<r<<endl;
mass[i]=r;
}
 
int i=12;
for(;mass[i]==0;i--);
for(;i>=0;i--)
{
s+=(mass[i]+'0');
//cout <<mass[i]<<endl;
}
 
//cout <<s<<endl;
return s;
}
 
int main()
{
/*int count=0;
cout <<endl<<strNum(count)<<endl;
for(int i=0;i<100;i++)
{
string name="z"+strNum(count);
name+=".dat";
cout <<name<<endl;
count++;
ofstream w(name.data(),ios::out);
if(!w)
{
cerr <<"don't open file"<<endl;
exit(1);
}
//zapic6 v fail
srand(time(0));//zacevaem generator
for(int i=0;i<1500;i++)
{
w <<(char)(32+rand()%93);
}
w.close();
}*/
 
//otkruvaem i chitaem failu
/*int count=0;
for(int i=0;i<100;i++)
{
string name="z"+strNum(count);
name+=".dat";
//cout <<name<<endl;
++count;
ifstream r(name.data(),ios::in);
if(!r)
{
cerr <<"don't open file"<<endl;
exit(1);//zaverwit6 programmy c kodom vozvrata 1
}
 
string text="";
char c;
while(r.get(c))
{
text+=c;
}
r.close();
//cout <<text<<endl;
//exit(1);
}*/
 
//ifstream r(
 
/*//gen file na 150000 c
string name="poltoru.dat";
ofstream w(name.data(),ios::out);
if(!w)
{
cerr <<"don't open file"<<endl;
exit(1);
}
//zapic6 v fail
srand(time(0));//zacevaem generator
for(int i=0;i<150000;i++)
{
w <<(char)(32+rand()%93);
}
w.close();*/
 
//prochitat6 na 150000
string name="poltoru.dat";
ifstream r(name.data(),ios::in);
if(!r)
{
cerr <<"don't open file"<<endl;
exit(1);//zaverwit6 programmy c kodom vozvrata 1
}
 
string text="";
char c;
while(r.get(c))
{
text+=c;
}
r.close();
//cout <<text<<endl;
 
return 0;
}

Ну вообще пока все то сколько одновременно можно отрыть файлов в системе пропустим, не будем делать, короче откинем эту часть задачи хз скок можно мб и много, смотря в каком смысле понимать, от допустим если мы откроем файл в одном потоке, в одной переменной командой ifstream r допустим но разные файлы в цикле, то их можно сколько угодно открыть, если мы откроем файл и содержимое файла сохраним в переменной кокой нить, либо в кокой нить динамической структуре данных, например линейный список, то естественно количество открытых файлов будет зависеть от оперативной памяти компьютера, ведь память не бесконечна, и чем больше памяти, тем больше мы можем файлов открыть, вообще эту часть не будем делать, это и так ясно. Ну пока все решаем дальше следующую .

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

Добавить комментарий Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • Samueldricy к записи Программка для заполнения форума на vBulletin 3.8.7
  • Andreybib к записи callback функции — функции обратного вызова.
  • Josephhaulp к записи Создание и использование динамических библиотек .dll в visual studio.
  • Felipesnaxy к записи Создание и использование динамических библиотек .dll в visual studio.
  • VincentKnifs к записи Создание и использование динамических библиотек .dll в visual studio.
©2019 Kselax.ru Theme by ThemeGiant