2015-03-20 4 views
-5

У меня есть программа на C#, которая должна читать от десятков до сотен миллионов записей из плоского текстового файла. Существует ли значительный прирост производительности при использовании вызова ap/invoke для неуправляемой dll dll C/C++, которая обрабатывает весь входной файл в отдельном потоке, или это незначительный прирост производительности, так что было бы лучше просто обработать мой файл IO в C#?C# I/O vs C I/O

+2

No .............. – EZI

+3

«[Если у вас есть две лошади, и вы хотите знать, какая из них быстрее, чем расы ваших лошадей.] (Http: // ericlippert .com/2012/12/17/performance-rant /) « – Filburt

+0

@ Филбурт, если у вас две лошади, очень медленные, тогда не важно, кто жокей – EZI

ответ

1

Вероятно, не существует значительного увеличения производительности при использовании dll C/C++. C# работает в среде с довольно эффективным JIT-компилятором, поэтому я предполагаю, что производительность кода ограничена скоростью чтения жесткого диска около 100 МБ/с. Конечно, если у вас SSD, ваш пробег может отличаться.

Обратите внимание, что если одна запись является, например, 1000 байтов, и вы читаете 100 миллионов записей, что означает 100 гигабайт. Чтение занимает 1000 секунд, т. Е. Более 15 минут, из-за низкой скорости жесткого диска.

1

Поскольку величина разности между связанным кодом процессора и привязкой IO требует, чтобы вы сохраняли количество времени, которое вы сохранили, написав код на нативном C, составляют доли процента выгоды.

Единственный раз, когда вы увидите преимущества наличия отдельных встроенных функций, это то, что выполняемые фактические инструкции являются узким местом. Например, хруст большого количества чисел в ОЗУ или вычисления пикселей для 3D-графики.

Это вряд ли стоит потратить ваше время, чтобы попытаться его использовать при работе с IO.