Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где можно эффективно переменить небезопасный код? или объясните мне на пальцах 
:(
    Опции темы
Azzdorf
  Дата 1.3.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



Читал про небезопасный (unsafe) код, но так ничего и не понял ни про то где его можно применить (это самый главный вопрос ) и как правильно оперировать указателями.
Помогите пожайлуста разобратся как эффектовно можно использовать небезопасный код и вообще этим кто-либо пользуется и настолько перспективно этим пользоватся (не хотят ли от этого полностью отказатся??) и хотелось бы небольшой примерчик использования указателей(только пожайлуста без употребления слова """"HelloWorld"""", ато если честно уже тошнит).

Зарание благодарен...
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
Walker
Дата 2.3.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: 1
Всего: 16



Доброго времени суток!

Исполнение небезопасного кода не подлежит контролю со стороны среды .NET. Управление памятью осуществляется Вами и все "неправомерные" действия Вашего кода остаются полностью на Вашей совести. Поскольку методы верификации со стороны среды не выполняются, то, как следствие, повышается быстродействие Ваших программ. Так, например, не осуществляется контроль границ массива и Вы сами отвечаете за то, что Ваши указатели не смотрят вне его пределов. Прибегать к использованию unsafe рекомендуется в виду критичности ресурсов или слишком ресурсоёмких вычислений. Таких как, например, многократное обращение к многомерному массиву (Рихтер). В подавляющем же большинстве случаев, удобства контроля памяти средой намного предпочтительнее трудоёмкой работы с указателями. Что касается примера - так ничем оно не отличается от C/C++.



--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
CYBERDREAM
Дата 2.3.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 8
Всего: 28



C# разрешает ограниченное использование указателей, которые проектировщики языков зачастую\ считают опасными. Подход C# в этом деле — требование ключевого слова unsafe при блоках кода или методах, использующих эту возможность. Это ключевое слово предупреждает пользователей такого кода о его потенциальной опасности. Оно также требует явного задания компилятору опции /unsafe, которая по умолчанию выключена. Такой «небезопасный» код используется для улучшения взаимодействия с неуправляемым API и иногда для повышения эффективности определённых участков кода.
Код

        [DllImport("libMach1.dll",EntryPoint="MAPI_Free")]
        public static unsafe  extern void MAPI_Free_(ushort * mem);
        ....
        private void epc1()
        {
            //вызов
            unsafe
            {
                FormatEPC(ref temp,_invent.Epc,_invent.EpcLen);
            }
        }
        ....
        unsafe void FormatEPC(ref StringBuilder buffer, ushort * EPCData, UInt32 EPCLength)
        {
            if (0 == EPCLength)
            {
                buffer=new StringBuilder("Blank EPC");
            }
            else
            {
                UInt32 epcLenIter=0;
                ushort *epcIter = EPCData;
                StringBuilder []mas=new StringBuilder[6];
                while (epcLenIter < EPCLength)
                {
                    mas[epcLenIter]=new StringBuilder(String.Format("{0:X4}",Int32.Parse(epcIter->ToString())));
                    buffer.Append(new StringBuilder(String.Format("{0:X4}",Int32.Parse(epcIter->ToString()))));
                    epcLenIter++;
                    epcIter++;
                }

                MAPI_Free_(epcIter);
            }
        }



--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Azzdorf
  Дата 10.3.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



спасибо Walker и CYBERDREAM как-бы суть понял, но примерчик не очень понял (к тому же С и С++ непришлось изучать), но это меня заинтересовало можна ли примерчик попроще smile  (согласен на пример с """"HelloWorld"""  smile ) или для примера есть ресурсоемкий кусок кода - сохраниение изображения через наложение двух слоев (оброботка за раз более 1 000 000 пикселей)

как-то здесь его можна использовать???
 

Код

    private void SaveImage()
    {
        Bitmap bitmapS1 = new Bitmap(1000, 1000);
        Bitmap bitmapRs = new Bitmap(bitmapR3, rectUserImageSize.Width, rectUserImageSize.Height);
        Bitmap bitmapS2 = (Bitmap)bitmapS1;
        Color cij = Color.Black;
        for (int y = 0; y < bitmapRs.Height; y++)
        {
            for (int x = 0; x < bitmapRs.Width; x++)
            {
                cij = bitmapRs.GetPixel(x, y);
                bitmapS2.SetPixel(pntImgStart.X + x, pntImgStart.Y + y, cij);
            }
        }
        string strURLs1 = strURLr.Remove(strURLr.Length - 4, 4).Insert(strURLr.Length - 4, "2.jpeg");
        bitmapS2.Save(strURLs1);
    }


Thanks....
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
ivashkanet
Дата 14.3.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 3
Всего: 149



Цитата(Azzdorf @  10.3.2008,  18:26 Найти цитируемый пост)
ля примера есть ресурсоемкий кусок кода - сохраниение изображения через наложение двух слоев

Для побитовой работы с изображением есть другие варианты: Анализ BitMap

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.