С++ массив против путаницы в скорости C# ptrC#

Место общения программистов C#
Ответить
Anonymous
 С++ массив против путаницы в скорости C# ptr

Сообщение Anonymous »

Я переписываю высокопроизводительное приложение C++ на C#. Приложение C# заметно медленнее оригинала C++. Профилирование сообщает мне, что приложение C# тратит большую часть времени на доступ к элементам массива. Поэтому я создаю простой тест доступа к массиву. Я получаю совершенно другие результаты, чем другие, проводящие подобное сравнение.

Код C++:

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

#include [*]
#include 
#include 
#include 

using namespace std;
using namespace std::chrono;

int main(void)
{
high_resolution_clock::time_point t1 = high_resolution_clock::now();

int xRepLen = 100 * 1000;
int xRepCount = 1000;

unsigned short * xArray = new unsigned short[xRepLen];
for (int xIdx = 0; xIdx < xRepLen; xIdx++)
xArray[xIdx] = xIdx % USHRT_MAX;

int * xResults = new int[xRepLen];

for (int xRepIdx = 0; xRepIdx < xRepCount; xRepIdx++)
{

// in each repetition, find the first value, that surpasses xArray[xIdx] + 25 - i.e. we will perform 25 searches
for (int xIdx = 0; xIdx < xRepLen; xIdx++)
{
unsigned short xValToBreach = (xArray[xIdx] + 25) % USHRT_MAX;
xResults[xIdx] = 0;

for (int xIdx2 = xIdx + 1; xIdx2 < xRepLen; xIdx2++)
if (xArray[xIdx2] >= xValToBreach)
{
xResults[xIdx] = xIdx2; break;
}

if (xResults[xIdx] == 0)
xResults[xIdx] = INT_MAX;
}
}

high_resolution_clock::time_point t2 = high_resolution_clock::now();
auto duration = duration_cast(t2 - t1).count();
cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/35649228/c-array-vs-c-sharp-ptr-speed-confusion[/url]
Ответить

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

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

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

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

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