Когда я должен был бы использовать stackalloc ключевое слово в C#?

Сортируйте данные по INDUSTRY_NUMBER Trading_Date, используйте INDUSTRY_NUMBER в качестве группы, определите переменную времени.

proc sort data=have;
    by industry_number trading_date;
run;

Затем преобразуйте свои данные во временные ряды, чтобы устранить любые временные промежутки. Установите любые пропущенные дни как предыдущее значение, поскольку оно не изменяется в эти торговые дни (например, выходные, праздничные дни и т. Д.).

proc timeseries data=have
                out=have_ts;
    by industry_number;
    id trading_date interval=day 
                    setmissing=previous
                    accumulate=average
    ;

    var value_weighted_return;
run;

Наконец, возьмите выходные данные временных рядов и конвертируйте их из дня в неделю. Поскольку вы используете веса, вы можете использовать average, а не total.

proc expand data=have_ts
            out=have_ts_week
            from=day
            to=week
    ;
    by industry_number;
    id trading_date;

    convert Value_weighted_return / method=aggregate observed=average;
run;
24
задан user 16 May 2012 в 06:38
поделиться

6 ответов

Из MSDN:

Используемый в небезопасном контексте кода для выделения блока памяти на стеке.

Одна из основных функций C# - то, что Вы не должны обычно получать доступ к памяти непосредственно, как Вы сделали бы в использовании C/C++ malloc или new. Однако, если Вы действительно хотите явно выделить некоторую память, Вы можете, но C# считает это "небезопасным", таким образом, можно только сделать это, если Вы компилируете с unsafe установка. stackalloc позволяет Вам выделять такую память.

Вы почти наверняка не должны использовать его для написания управляемого кода. Выполнимо, что в некоторых случаях Вы могли написать более быстрый код при доступе к памяти непосредственно - это в основном позволяет Вам использовать управление указателем, которое удовлетворяет некоторым проблемам. Если у Вас нет определенной проблемы, и небезопасный код является единственным решением затем, Вам, вероятно, никогда не будет нужно это.

18
ответ дан 28 November 2019 в 23:15
поделиться

Paul,

Поскольку все здесь сказали, что ключевое слово направляет время выполнения для выделения на стеке, а не "куче". Если Вы интересуетесь точно, что это означает, проверьте эту статью.

9
ответ дан 28 November 2019 в 23:15
поделиться

http://msdn.microsoft.com/en-us/library/cx9s2sy4.aspx

это ключевое слово используется для работы с небезопасным управлением памятью. При помощи его у Вас есть способность использовать указатель (мощная и болезненная функция в C/C++)

3
ответ дан 28 November 2019 в 23:15
поделиться

stackalloc направляет время выполнения .NET для выделения памяти на стеке.

2
ответ дан 28 November 2019 в 23:15
поделиться

Это похоже на Steve, на которого указывают, только используемого в небезопасном контексте кода (например, когда Вы хотите использовать указатели).

Если Вы не будете использовать небезопасный код в своем приложении C#, то Вам никогда не будет нужно это.

0
ответ дан 28 November 2019 в 23:15
поделиться

Stackalloc будет выделять данные на стеке, что можно использовать для избежания мусора, который будет генерироваться при многократном создании и уничтожении массивов типов значений внутри метода.

public unsafe void DoSomeStuff()
{
    byte* unmanaged = stackalloc byte[100];
    byte[] managed = new byte[100];

    //Do stuff with the arrays

    //When this method exits, the unmanaged array gets immediately destroyed.
    //The managed array no longer has any handles to it, so it will get 
    //cleaned up the next time the garbage collector runs.
    //In the mean-time, it is still consuming memory and adding to the list of crap
    //the garbage collector needs to keep track of. If you're doing XNA dev on the
    //Xbox 360, this can be especially bad.
}
15
ответ дан 28 November 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: