Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Быстродействие передачи данных в .NET  (Прочитано 54974 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 05-02-2008 09:21 » 

Известные разные любопытные проекты, находящиеся в зачаточном состоянии. Типа: http://channel8.msdn.com/Posts/Cosmos-the-C-OS-that-you-can-play-with/

Если их доведут до ума, будет интересно.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
jur
Помогающий

lt
Offline Offline

« Ответ #31 : 06-02-2008 08:57 » 

Известные разные любопытные проекты, находящиеся в зачаточном состоянии. Типа: http://channel8.msdn.com/Posts/Cosmos-the-C-OS-that-you-can-play-with/
Если их доведут до ума, будет интересно.

Ну, это для меня очень уж круто! :-) Я ведь пока еще только в начальной стадии нахожусь...
Записан

MPEG-4 - в массы!
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 06-02-2008 11:17 » 

dimka, пардон про 512 действительно просмотрел)
в общем... о чем я хотел сказать... в общем вы правы. по 512 байт пересылать - с такой частотой... не получится. однозначно. и боюсь не только в .NET но и в обычных Сях я бы не поручился.. однозначно сборку пакетов а драйвер. тока так.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #33 : 31-07-2009 07:55 » 

чтоб новую тему не заводить...

Как в шарповую функцию передать ссылку на структурный тип  ? Должно же быть такое, иначе я не понимяу причину существования этого языка
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #34 : 31-07-2009 08:29 » 

Алексей1153++, ты должен передать в функцию указатель (.NET тип System.IntPtr - аналог void *). А дальше внутри .NET разыменовать этот указатель в структуру System.Runtime.InteropServices.Marshal.PtrToStructure.

И смотри, что .NET не будет управлять памятью этой структуры, находящейся за указателем. Т.е. ты сам должен позаботиться об освобождении этой памяти.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #35 : 31-07-2009 08:34 » 

Dimka, а штатных средств не предусмотрено что ли ? Это странно. Наверное меньше текста и заморочек будет, если обернуть в класс :DD

Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #36 : 31-07-2009 08:58 » 

а ещё вопросик

предупреждение CS1690: Доступ к члену в "form_1.m_days" может вызвать исключение времени исполнения, поскольку он является полем класса, который упаковывается и передается по ссылке

код такой
Код:
//открываем на редактирование
form_1 dlg=new form_1();

if(DialogResult.OK==dlg.ShowDialog())
{
int n=dlg.m_days; //m_days - это public int
...
}

что за бред , ведь dlg не вышел из видимости ещё
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #37 : 31-07-2009 14:48 » 

Цитата: Алексей1153++
Dimka, а штатных средств не предусмотрено что ли ?
Штатных средств для чего? Я тебе и написал штатные средства получения доступа к внешним структурам.

Цитата: Алексей1153++
CS1690
В MSDN же написано:

Цитата
To resolve the warning, copy the member into a local variable and call the method on that variable.

Код: (Text)
// CS1690.cs
using System;

class WarningCS1690: MarshalByRefObject
{
   int i = 5;

   public static void Main()
   {
     WarningCS1690 e = new WarningCS1690();
     e.i.ToString();   // CS1690

     // OK
     int i = e.i;
     i.ToString();
     e.i = i;
   }
}
Видимо, твой dlg собран так, что может быть как объектом в твоей программе, так и локальной заглушкой (stub) объекта в удалённом процессе (по аналогии с COM-объектами). А в .NET, как известно, типы данных различаются как "передаваемые по ссылке" и "передаваемые по значению". Твой int - тип, экземпляры которого передаются значением. Т.е. для операций с этим значением нужна локальная переменная, где это значение находится. А внутри твоего объекта, который может быть заглушкой, на самом деле этого значения не находится. Оно должно быть сначала получено с удалённого объекта и куда-то сохранено, и только потом с ним можно выполнять какие-нибудь действия. Если ты не заводишь локальную переменную, в которую сохраняешь значение 1 раз, то при разных операциях на самом деле могут идти многочисленные запросы к удалённому объекту, и не факт, что будет получаться одно и то же.

В общем члены таких типов у объектов таких классов с точки зрения программирования чем-то похожи на переменные C++ с квалификатором volatile.
Код: (C++)
int volatile x;
Т.е. могут менять значения вне текущего потока управления. И компилятор указывает, что от греха подальше лучше их скопировать в локальную переменную, которая гарантированно не будет меняться нигде, кроме текущего кода. Хотя, если не хочется, то можно и не копировать, но warning останется Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #38 : 31-07-2009 17:55 » 

понятненько ) Я скопирую, а то окно вывода загадилось ))

а ещё вопрос, не нашёл в настройках, если там вообще есть, как отучить редактор от вредной вещи: когда начинаю комментарий с /*  , то после перевода строки редактор ляпает символ "*". неудобно как-то
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #39 : 31-07-2009 18:03 » 

почему не удаётся

const string txt=... .ToString();

или тут как-то по хитрому из неконстантного в константный тип преобразование делается ? Уфф
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #40 : 31-07-2009 19:11 » 

Алексей1153++, ты вообще где видел, чтобы константа инициализировалась значением переменной? Const ведь обрабатывается компилятором. Справа должна быть либо константа, либо вычислимое на этапе компиляции выражение.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #41 : 31-07-2009 19:20 » 

видел и применял неоднократно. В С++

   int i=1;
   const int k=i;


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

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #42 : 04-08-2009 07:39 » 

чтоб новую тему не заводить...

Как в шарповую функцию передать ссылку на структурный тип  ? Должно же быть такое, иначе я не понимяу причину существования этого языка

а есть проще возможность, оказывается
Код:
void f(out int n)
{
n=7;
}

int n=0;
f(out n);
//n==7
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #43 : 04-08-2009 08:07 » 

пытаюсь сделать аналог atoi из C++
Почти получилось, не знаю только, как в регвыражении задать, что если в начале строки не цифра, то так же надо вернуть ""

Сейчас @"[\+\-]{0,1}\d+" выбирает число верно, но не сначала строки (то есть "qqq123" тоже вернёт 123)
Код:
public static int atoi(string text)
{

try
{
//найти int число, начинающееся с +,- или цифры
text=System.Text.RegularExpressions.Regex.Match(text,@"[\+\-]{0,1}\d+").ToString();
//парсим в цифру
return int.Parse(text);
}
catch(Exception)
{
}

return 0;
}
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #44 : 04-08-2009 10:23 » 

Цитата: Алексей1153++
пытаюсь сделать аналог atoi из C++
А зачем изобретать велосипед?

Convert.ToInt32(<любой стандартный тип>).

Затем int.Parse(<строка>) - это если в строке точно число, иначе исключение.
int.TryParse - это без исключения.

Аналогичные статические методы есть у других классов чисел.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #45 : 04-08-2009 10:29 » 

да, японачалу это использовал, оба способа пробовал, но у них один недостаток, которого нет у atoi :

они кидают исключение в случаях, когда в строке не цифра. А частенько требуется достать циферку из строки вида

12wdfdsfg

а TryParse умеет кидать System.ArgumentException , кстати )
« Последнее редактирование: 04-08-2009 10:33 от Алексей1153++ » Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #46 : 04-08-2009 11:56 » 

Алексей1153++, ну дак и достань "циферку" регулярным выражением, как все белые люди делают Улыбаюсь

Цитата: Алексей1153++
а TryParse умеет кидать System.ArgumentException , кстати )
В MSDN про это ничего не сказано - все возможные входы и даже null не валят исключений, а возвращают false. Извращаться меньше надо Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #47 : 04-08-2009 15:18 » 

да, это я промах дал, это у перегруженной TryParce исключение
Код:
// Исключения:
//   System.ArgumentException:
//     Параметр style не содержит значения из перечисления System.Globalization.NumberStyles.
//     -или- Параметр style не является сочетанием значений System.Globalization.NumberStyles.AllowHexSpecifier
//     и System.Globalization.NumberStyles.HexNumber.
public static bool TryParse(string s,NumberStyles style,IFormatProvider provider,out int result);
}
- это не из мсдн, а из файла студии

Цитата
Алексей1153++, ну дак и достань "циферку" регулярным выражением, как все белые люди делают Улыбаюсь
а я чОрный людь ))) так я и достал )
Код:
[\-\+]{0,1}\d+
Но как задать выражение, чтобы смотрелось только с начала строки ?
Записан

Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #48 : 04-08-2009 16:14 » 

Ну в обычных регулярках, значек ^ обозначает начало строки и значек $ конец. Т.е. чтоб выташить цифру в твоем случае, я бы написал ^\([-+]\{0,1\}[0-9]\+\).*$ Но это по правилам sed.
« Последнее редактирование: 04-08-2009 16:26 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #49 : 05-08-2009 04:56 » 

Финч, спасибо, ^ - самое то.
Код:
//аналог atoi из C++
public static int atoi(string text)
{
try
{
text=System.Text.RegularExpressions.Regex.Match(text,@"^[\+\-]{0,1}\d+").ToString();
if(text=="")return 0;

return int.Parse(text);
}
catch(Exception)
{
}

return 0;
}
Записан

Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines