Каково сравнение больших и небольших размеров файлов между приложением и базой данных? [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Каково сравнение больших и небольших размеров файлов между приложением и базой данных? [закрыто]

Сообщение Anonymous »

Основная проблема возникает из -за путаницы в обработке файлов на основе их размеров, и в коде для обработки файлов (ы). База данных или файловая система: < /p>

дизайнеры приложений часто сталкиваются с вопросом о том, хранить ли большие объекты в файловой системе или в базе данных. Часто это решение принимается для простоты дизайна приложений. Иногда также используются измерения производительности. В этой статье рассматривается вопрос о фрагментации - одной из операционных проблем, которые могут повлиять на производительность и/или управляемость системы, как развернутую долгосрочную перспективу. Как и ожидалось от общей мудрости, объекты меньше 256 тыс. Лучше всего хранятся в базе данных, в то время как объекты, более 1 млн, лучше всего хранятся в файловой системе. Между 256K и 1 м, коэффициент чтения: записи и скорость перезапись объектов или замены являются важными факторами. Мы использовали понятие «возраста хранения» или количество перезаписей объектов как способ нормализации времени на стенке. Возраст хранения позволяет нашим результатам или аналогичным результатам применяться по ряду коэффициентов чтения: записи и скорости замены объектов.

, что, в свою очередь, я решил реализовать FileStream в обработке больших файлов. Логика сравнения размера файлов? Это означает, что файлы меньше 256K считаются небольшими размерами файлов, в то время как файлы, превышающие 1 м , считаются большими размерами файлов. Я думаю, что 1m эквивалентен 1 МБ . Я полагаю, что этот вопрос имеет связь с этой статьей: ASP.NET CORE Blazor Dults File. Применить и отфильтровать предел размера файла, который должен быть собран и сохранен, например, чтобы предотвратить загрузку больших файлов: < /p>

Код: Выделить всё

@implements IAsyncDisposable
@inject IDbContextFactory DbFactory




@if (myModel.Img is not null)
{
[img]@myModel.Img[/img]
}
Save


@code {
[SupplyParameterFromForm]
private MyModel myModel { get; set; } = new();
private SQLServerContext context = default!;
private string? output;

protected override void OnInitialized()
{
context = DbFactory.CreateDbContext();
}

private async Task HandleImageUpload(InputFileChangeEventArgs e)
{
long threeMB = 3L * 1024L * 1024L; //3 MB limit

var file = e.File;
var stream = file.OpenReadStream(maxAllowedSize: threeMB);
var buffer = new byte[file.Size];
await stream.ReadAsync(buffer);
var base64 = Convert.ToBase64String(buffer);
myModel.Img = $"data:{file.ContentType};base64,{base64}";
}

private async Task SimulateImg()
{
var sQLServerHelper = new SQLServerHelper(context);
string testID = "test-id";
byte[]? testImg = SQLServerInnerHelper.TryExtractImageBytes(myModel.Img);
var spParam = SQLServerInnerHelper.ManageImageDataWOutputParams(
testID: testID,
testImg: testImg,
functionKey: "SIMULATE_TEST_IMAGE");
output = await sQLServerHelper.SimulateImgStringOutputAsync("mySP", spParam);
if (output is not null && output == "SUCCESSFUL")
{
await JS.InvokeVoidAsync("showLiveToast");
}
else if (output is not null && output != "SUCCESSFUL")
{
await JS.InvokeVoidAsync("showLiveToastError");
}
else
{
await JS.InvokeVoidAsync("showLiveToastError");
}
}

public async ValueTask DisposeAsync()
{
await context.DisposeAsync();
}
}
Следовательно, я бы рассмотрел приведенный выше метод как указание maxAllowedSize с threemb в качестве большого файла.
Мой вопрос:

[*] Можно эти фигуры, меньше, чем применение, применение, применение, и больше, чем 1m . Логика? Я не получил точку настройки этого: var stream = file.openreadstream (maxAllowedSize: threemb); Если это не ведут не так, как ожидалось, поэтому мне нужно было рефакторировать код в это:

Код: Выделить всё

private async Task HandleImageUpload(InputFileChangeEventArgs e)
{
long threeMB = 3L * 1024L * 1024L; //3 MB limit

var file = e.File;
if (file.Size > threeMB)
{
await JS.InvokeVoidAsync("showLiveToastError");
}
else
{
var stream = file.OpenReadStream(maxAllowedSize: threeMB);
var buffer = new byte[file.Size];
await stream.ReadAsync(buffer);
var base64 = Convert.ToBase64String(buffer);
myModel.Img = $"data:{file.ContentType};base64,{base64}";
}
}
Следовательно, в какой точке этой настройки: var stream = file.openreadstream (maxAllowedSize: threemb); ?
Я ожидал этого:

Чтение одного файла или множества файлов, более 500 Kb (3 MB). /> < /blockquote>
Примечание: исключение не мешает во время выполнения, и я не заметил, что до тех пор, пока я не проверил консоль отладки < /code>. < /p>
Согласно пользователю здесь, SO, рефакторированный код несколько хорош, но я не знаю, как оптимизировать и избегать чтения поток в имене в память. сам. Поэтому я спросил ИИ, и это дало мне этот ответ: < /p>

Код: Выделить всё

private async Task HandleFileSelected(InputFileChangeEventArgs e)
{
IBrowserFile file = e.File;

// Max file size limit, e.g., 10 MB
long maxFileSize = 10 * 1024 * 1024;

// Full path where you want to save the file
var path = Path.Combine("UploadedFiles", file.Name); // make sure folder exists

// Create a stream to write the uploaded file to the server disk
await using FileStream fs = new(path, FileMode.Create);

// Stream the uploaded file directly into the FileStream (no full memory load)
await file.OpenReadStream(maxFileSize).CopyToAsync(fs);
}
, который, технически, в свою очередь, файл поступал из , а не из предварительно определенного пути папки. К сожалению, постоянно спрашивать AI оставлять меня в замешательстве. 1m (b) , применяться к логике сравнения размера файлов на стороне приложения? Значение, файлы меньше 256K считаются небольшими размерами файлов, в то время как файлы, больше 1m (b) , считаются большими размерами файлов.

Как оптимизировать и рефактор кода, чтобы избежать чтения потока входящего файла в память, все это за все это будет? Используется в принятии решений для этой концепции: < /p>

вне обработки небольшого файла, избегайте чтения входящего файла
потока непосредственно в память одновременно. Например, не копируйте все
байтов файла в MemoryStream и не читайте весь поток в массив байтов
A все сразу. Эти подходы могут привести к деградированному приложению
производительности и потенциальному отрицанию риска обслуживания (DOS), особенно для компонентов на стороне сервера
. Вместо этого рассмотрите возможность принятия любого из следующих подходов
: < /p>

Скопируйте поток непосредственно в файл на диске, не читая его в память. Обратите внимание, что приложения Blazor, выполняющие код на сервере, не в состоянии
напрямую доступ к файловой системе клиента. Для получения дополнительной информации см. Файлы загрузки в раздел внешней службы. Возможно, мне нужно усердно работать для этого и продолжать учиться и практиковать, поэтому, пожалуйста, терпите меня. Если вы найдете недостающую тему, которая упоминается в разделе комментариев, см. В этом посте.

Подробнее здесь: https://stackoverflow.com/questions/797 ... d-a-databa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»