|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
В многопоточном C#-приложении предусмотрена журнализация. Каждый поток сам открывает файл и пишет в него, причем, довольно активно и много. В коде предусмотрен код (метод Flush), сбрасывающий данные в файл через каждую 1000 записанных строк. Файлы закрываются только когда происходит выход из приложения и потоки освобождают ресурсы, которыми они владели. На Windows 8 (на других пока не проверял) в течение всего времени работы приложения (несколько часов) не видно ни одной записи - то есть имена файлов есть, но в них ноль записей. После завершения приложения (и, соответственно, закрытия файлов) все записи можно прочитать. Я предполагал, что Flush обеспечивает запись данных в файл и их просмотр внешними приложениями без необходимости закрывать файл. Может кто-нибудь пояснить почему так происходит?! То есть это из-за того, что файл открыт в потоке такой эффект или в Windows 8 какая-то особенная буферизация данных перед сбросом на диск?! Просто хотелось бы просматривать логи параллельно работающему приложению. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 15:14 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
myaucha, На самом деле все происходит правильно, вы создали файл - файл физически записался на дик, поэтому вы его видите, после этого - вы открываете файл для записи и пишите туда данные, но при этом не сохраняете, соответственно, когда вы его открываете "в ручную" - он пуст. Для аналогии откройте документ вручную, впишите пару строк и откройте его еще раз не закрывая - результат - пустой файл ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 16:04 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
myauchaФайлы закрываются только когда происходит выход из приложения и потоки освобождают ресурсы Лучше закрывайте файлы сразу после записи ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 16:09 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
myaucha, нормальный логгер - прикрутите ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 16:18 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Я проверял в Windows 7, но открывал файл из главного потока. Когда вызывал flush, но файл не закрывал, то все данные, записанные к этому времени, можно было просмотреть, например, через блокнот. Приложение пишет очень активно, а вы предлагаете после каждой порции данных закрывать и открывать файл?! По моему, это не очень разумно ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 16:40 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
myaucha, А почему нет? Зачем держать все время открытый поток? А вообще Изопропил прав ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 16:52 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
myauchaПриложение пишет очень активно, а вы предлагаете после каждой порции данных закрывать и открывать файл?! По моему, это не очень разумноРешение должно основываться не на домыслах, а на результатах тестов. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 17:01 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Алексей КmyauchaПриложение пишет очень активно, а вы предлагаете после каждой порции данных закрывать и открывать файл?! По моему, это не очень разумноРешение должно основываться не на домыслах, а на результатах тестов. Я проверял в Windows 7, но открывал файл из главного потока. Когда вызывал flush, но файл не закрывал, то все данные, записанные к этому времени, можно было просмотреть, например, через блокнот. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 17:17 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
myauchaАлексей Кпропущено... Решение должно основываться не на домыслах, а на результатах тестов. Я проверял в Windows 7, но открывал файл из главного потока. Когда вызывал flush, но файл не закрывал, то все данные, записанные к этому времени, можно было просмотреть, например, через блокнот. Я не про flush, я про предположение о том, что постоянное закрытие и открытие файла заметно скажется на производительности системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2015, 17:34 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Изопропилmyaucha, нормальный логгер - прикрутите лайкнул! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2015, 13:30 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
WinnipuhИзопропилmyaucha, нормальный логгер - прикрутите лайкнул! +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 09:22 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Изопропилmyaucha, нормальный логгер - прикрутите+1 к примеру с Enterprise Library Logger проблемы почитать логи во время работы приложения никогда не возникало :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 09:28 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
-1 Нельзя брать готовое пока сам не научишься. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 10:05 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Алексей К-1 Нельзя брать готовое пока сам не научишься. Алексей, а вы пробовали писать свою операционную систему? Ну хотя бы прототип? Или сразу на готовенькое пришли? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 10:40 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Arm79Алексей К-1 Нельзя брать готовое пока сам не научишься. Алексей, а вы пробовали писать свою операционную систему? Ну хотя бы прототип? Или сразу на готовенькое пришли?Но я знаю, как её написать. Это только вопрос времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 10:46 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Алексей КArm79пропущено... Алексей, а вы пробовали писать свою операционную систему? Ну хотя бы прототип? Или сразу на готовенькое пришли?Но я знаю, как её написать. Это только вопрос времени. Вот и у ТС вопрос времени... myauchaПосле завершения приложения (и, соответственно, закрытия файлов) все записи можно прочитать. Я предполагал, что Flush обеспечивает запись данных в файл и их просмотр внешними приложениями без необходимости закрывать файл. Может кто-нибудь пояснить почему так происходит?! Flush по умолчанию делегирует операционке обязанность скинуть изменения на диск. Прямое скидывание, это flush(true) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 10:52 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
skyANA к примеру с Enterprise Library Logger проблемы почитать логи во время работы приложения никогда не возникало :) Эта поделка еще жива? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 11:17 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
Arm79Алексей, а вы пробовали писать свою операционную систему? Ну хотя бы прототип? Или сразу на готовенькое пришли? Еще предложи свой проц из транзисторов спаять. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 11:19 |
|
Запись в файл из потока
|
|||
---|---|---|---|
#18+
ЕвгенийВArm79Алексей, а вы пробовали писать свою операционную систему? Ну хотя бы прототип? Или сразу на готовенькое пришли? Еще предложи свой проц из транзисторов спаять. А что, я например, схемотехнику в ВУЗе проходил. Как говорил Алексей, "Но я знаю, как её написать. Это только вопрос времени". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2015, 12:22 |
|
|
start [/forum/topic.php?fid=20&fpage=76&tid=1401190]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 331ms |
total: | 460ms |
0 / 0 |