Почему Python намного быстрее, чем Dart, для операций чтения/записи файлов?Python

Программы на Python
Ответить
Anonymous
 Почему Python намного быстрее, чем Dart, для операций чтения/записи файлов?

Сообщение Anonymous »

Я тестировал производительность чтения/записи файлов как в Python, так и в Dart, и получил неожиданный результат: Python значительно быстрее, чем Dart, выполняет эти операции. Вот время, которое я записал:
Python:
  • Время записи: 10,28 секунды
  • Время чтения: 4,88 секунды.
  • Общее время: 15,16 секунды.
Дротик:
  • Время записи: 79 секунд
  • Время чтения: 10 секунд
  • Общее время: 90 секунд
Я ожидал, что Dart будет работать так же или даже лучше, чем Python в этом контексте, поэтому я озадачен этими результатами. Я провожу оба теста на одной и той же системе (Mac) с одинаковой структурой кода, чтобы обеспечить справедливое сравнение.
Вопросы:
  • Существуют ли какие-либо известные причины такой значительной разницы в производительности при обработке файлов между Python и Dart?
  • Могут ли определенные библиотеки, форматы кодирования или другие факторы системного уровня в Python или Dart влияет на скорость ввода-вывода файлов?
  • Существуют ли в Dart методы оптимизации для повышения производительности чтения/записи файлов?
Я был бы признателен за любые идеи или предложения о том, что может быть причиной этого несоответствия и как потенциально оптимизировать производительность файлового ввода-вывода Dart.
Вот код Python:
def benchmark(cnt=200):
block_size = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" * (1024 * 1024)
file_path = "large_benchmark_test.txt"

start_time = time.time()
with open(file_path, "w") as file:
for _ in range(cnt):
file.write(block_size)
write_end_time = time.time()

with open(file_path, "r") as file:
while file.read(1024):
pass
read_end_time = time.time()

write_time = write_end_time - start_time
read_time = read_end_time - write_end_time
total_time = read_end_time - start_time

print(f"Python - Write: {write_time:.2f} s")
print(f"Python - Read: {read_time:.2f} s")
print(f"Python - Total: {total_time:.2f} s")
os.remove(file_path)

И код Dart:
void benchmark({int cnt=200}) {
final blockSize = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * 1024 * 1024;
final filePath = 'large_benchmark_test.txt';
final file = File(filePath);

final writeStartTime = DateTime.now();
final sink = file.openSync(mode: FileMode.write);
for (int i = 0; i < cnt; i++) {
sink.writeStringSync(blockSize);
}
sink.closeSync();
final writeEndTime = DateTime.now();
final writeTime = writeEndTime.difference(writeStartTime).inSeconds;
print("Dart (Synch) - Write: $writeTime s");

final readStartTime = DateTime.now();
final reader = file.openSync(mode: FileMode.read);
while (true) {
final buffer = reader.readSync(1024);
if (buffer.isEmpty) break;
}
reader.closeSync();
final readEndTime = DateTime.now();

final readTime = readEndTime.difference(readStartTime).inSeconds;
final totalTime = readEndTime.difference(writeStartTime).inSeconds;

print("Dart (Synch) - Read: $readTime s");
print("Dart (Synch) - Total: $totalTime s");
file.deleteSync();
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... operations
Ответить

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

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

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

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

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