Первоначально я разместил этот вопрос:
how-can-i-create-a-tar-file-in-memory-from-several-varbinarymax-колонны, что было полезным. Но я понял, что нам может потребоваться создать большие файлы .tar, с файлами около 2 ГБ, которые могут привести к ~ 20 ГБ .tar файлы. И использование MemoryStream не сработает, и я не могу выделить эту мюшную память на сервере. -a-tar, где ответ подразумевает, что метод не будет использовать много памяти, и этот подход записывается в файл смолы на диске. Столбцы с SQL Server и создайте временный файл на диске, который я затем передаю обратно в Calling Client. < /p>
Мой текущий код: < /p>
var tempFileName = Path.GetTempFileName();
await using var tarFileStream = File.Create(tempFileName);
await using (var tarWriter = new TarWriter(tarFileStream, leaveOpen: true))
{
await using var connection = new SqlConnection("YourConnectionString");
const string query = @"
SELECT
FileName,
FileData
FROM FilesTable;
";
await using var command = new SqlCommand(query, connection);
await connection.OpenAsync();
await using var reader = command.ExecuteReaderAsync(CommandBehavior.SequentialAccess);
while (await reader.ReadAsync())
{
var fileName = reader.GetString(0);
await using var fileDataStream = reader.GetStream(1);
var entry = new PaxTarEntry(TarEntryType.RegularFile, fileName)
{
DataStream = fileDataStream,
};
await tarWriter.WriteEntryAsync(entry);
}
}
tarFileStream.Position = 0;
// Stream tarFileStream to response body..
< /code>
Когда я пробую этот подход, и во время петли я получаю где-то около 8 ГБ, выделенных в LOH для пары 1,7 ГБ файлов, хранящихся в SQL Server (FileSttream). Я могу осмотреть использование памяти в Jetbrains Dotmemory, и память выделяется в базовой памяти Tarwriter, если я не ошибаюсь. ? Согласно ответу Джона Скитса, я должен не употреблять столько памяти? .net/6hgpi7mb.png "/>
Подробнее здесь: https://stackoverflow.com/questions/794 ... -for-files
Почему этот подход с Tarwriter использует много памяти с потоками для файлов? ⇐ C#
Место общения программистов C#
1738683700
Anonymous
Первоначально я разместил этот вопрос:
how-can-i-create-a-tar-file-in-memory-from-several-varbinarymax-колонны, что было полезным. Но я понял, что нам может потребоваться создать большие файлы .tar, с файлами около 2 ГБ, которые могут привести к ~ 20 ГБ .tar файлы. И использование MemoryStream не сработает, и я не могу выделить эту мюшную память на сервере. -a-tar, где ответ подразумевает, что метод не будет использовать много памяти, и этот подход записывается в файл смолы на диске. Столбцы с SQL Server и создайте временный файл на диске, который я затем передаю обратно в Calling Client. < /p>
Мой текущий код: < /p>
var tempFileName = Path.GetTempFileName();
await using var tarFileStream = File.Create(tempFileName);
await using (var tarWriter = new TarWriter(tarFileStream, leaveOpen: true))
{
await using var connection = new SqlConnection("YourConnectionString");
const string query = @"
SELECT
FileName,
FileData
FROM FilesTable;
";
await using var command = new SqlCommand(query, connection);
await connection.OpenAsync();
await using var reader = command.ExecuteReaderAsync(CommandBehavior.SequentialAccess);
while (await reader.ReadAsync())
{
var fileName = reader.GetString(0);
await using var fileDataStream = reader.GetStream(1);
var entry = new PaxTarEntry(TarEntryType.RegularFile, fileName)
{
DataStream = fileDataStream,
};
await tarWriter.WriteEntryAsync(entry);
}
}
tarFileStream.Position = 0;
// Stream tarFileStream to response body..
< /code>
Когда я пробую этот подход, и во время петли я получаю где-то около 8 ГБ, выделенных в LOH для пары 1,7 ГБ файлов, хранящихся в SQL Server (FileSttream). Я могу осмотреть использование памяти в Jetbrains Dotmemory, и память выделяется в базовой памяти Tarwriter, если я не ошибаюсь. ? Согласно ответу Джона Скитса, я должен не употреблять столько памяти? .net/6hgpi7mb.png "/>
Подробнее здесь: [url]https://stackoverflow.com/questions/79412121/why-does-this-approach-with-tarwriter-use-alot-of-memory-with-streams-for-files[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия