Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: Omicron_Persey_8
Дата сообщения: 05.04.2009 11:24
dredd00
Имеешь в виду native image? То есть сборка содержит не IL, а исполняемые инструкции платформы? Не знаю, как там в Mono, но для винды есть утилита ngen.exe, которая транслирует IL в код платформы. Утилита идет в составе .NET Framework. Только толку от этого не особо много, лишь ускоряется время первоначальной загрузки сборки, и то почти незаметно.
Автор: dredd00
Дата сообщения: 05.04.2009 12:52
да примерно это и имел ввиду. но думал что будет прирост скорости. если прироста скорости выполнения нет то не актуально...
Автор: Omicron_Persey_8
Дата сообщения: 05.04.2009 13:53
dredd00
Нет, прироста скорости не будет никакого. JIT-компиляция выполняется по требованию, вплоть до метода. И поэтому если во время сеанса работы приложения какой-либо метод вызван не будет, то для него и не будет выполнена компиляция в native-код. Ngen же пробегает всю сборку и преобразует ее в машинный код, следовательно компиляции по требованию не нужно (весь код уже native и пригоден для выполнения платформой). Но однозначно говорить о ненужности Ngen я бы не стал: при инсталляции .NET Framework для всех его сборок строятся машинные образы
Автор: LuckyStrike
Дата сообщения: 05.04.2009 19:21
Найти произведение всех целых чисел от a до b (значения a и b вводятся с клавиатуры).
Автор: artemds
Дата сообщения: 06.04.2009 09:24
Генератор образов в машинном коде (Ngen.exe) — это средство повышения быстродействия управляемых приложений. Ngen.exe создает образы в машинном коде, представляющие собой файлы, содержащие компилированный специфический для процессора машинный код, и устанавливает их в кэш образов в машинном коде на локальном компьютере. Среда выполнения использует образы в машинном коде, находящиеся в кэше, вместо использования JIT-компилятора для компиляции исходной сборки.
Автор: Omicron_Persey_8
Дата сообщения: 06.04.2009 10:27
artemds
За цитирование MSDN я вам очень признателен

LuckyStrike
При помощи Console.ReadLine() читай значения a и b, проверяй на корректность (a меньше b и тому подобное). Затем перебирай в цикле значения между a и b и перемножай
Автор: dneprcomp
Дата сообщения: 06.04.2009 23:17
eLLoco
Спасибо. Штука интересная. Но в данном случае не помогла. Мой процесc работает со скрином. BackgroundWorker расчитан, по видимому, на другого вида процессы(расчеты, обращение к DB и подобное)
Автор: avkorets
Дата сообщения: 07.04.2009 15:13
Omicron_Persey_8
спасиб склонился к форичу =)
кстате не подскажите как всетаки копировать один массив в другой?
я делаю так..
myAL.Clear();чищу А
myBL.CopyTo(myAL);копирую В в А
myBL.Clear(); чищу Б
итого должно остацо чистый Б и А со значениями Б...ругается на myBL.CopyTo(myAL);
Автор: Omicron_Persey_8
Дата сообщения: 07.04.2009 17:51
avkorets
Ну во-первых, Array.CopyTo(Array array, int index). У тебя в коде я что-то передачу стартового индекса не ощущаю.
Во-вторых, контролируй, чтобы длина myAL была больше или равна длине myBL
Автор: avkorets
Дата сообщения: 07.04.2009 20:16
Omicron_Persey_8
так мсдн говорит что можно и без параметра ...ну даже если не так, все равно прараметр я ставил с 0 ..все равно ругается...
насчет длины интересно, не знал...может стоит постоянную длину задать на всякий? более 20 элементов все равно врят ли будет...
но в моем случае длина А составляет 3 элемнта а длина Б 1 элемент так что не понятно чо ругается то=)
Автор: Omicron_Persey_8
Дата сообщения: 07.04.2009 20:28
avkorets
Хотел бы я видеть ту статью...

Ругается во время компиляции или в рантайме?
В любом случае, пиши текст ошибки, а то гадать долго можно
Автор: avkorets
Дата сообщения: 08.04.2009 07:42
Omicron_Persey_8
при компиляции.

Цитата:

Наиболее подходящий перегруженный метод для "System.Collections.ArrayList.CopyTo(System.Array, int)" имеет несколько недопустимых аргументов

Хотя myBL.CopyTo(myAL, 0);
и

Цитата:

Аргумент "1": преобразование типа из "System.Collections.ArrayList" в "System.Array" невозможно

единственное мож я не правильно массив задал?
ArrayList myAL = new ArrayList();
ArrayList myBL = new ArrayList();
обе ошибки относятся к строке CopyTo
кстате в методе ArrayList.CopyTo можно не указывать с какого индекса начинать копировать...
Автор: Lazy KoT
Дата сообщения: 08.04.2009 11:20
avkorets
Цитата:
Аргумент "1": преобразование типа из "System.Collections.ArrayList" в "System.Array" невозможно
Русским же по белому написано, что невозможно преобразовать. Аргументом ArrayList.CopyTo должен быть Array, а ты ему подсовываешь ArrayList.
Автор: avkorets
Дата сообщения: 08.04.2009 11:35
Lazy KoT
да я уже понял =)
с утра встал и все рюхнул =)
Автор: ziii
Дата сообщения: 08.04.2009 15:29
Lazy KoT

Цитата:
множественное наследование классов


Цитата:
невозможно. Возможно множественное наследование интерфейсов.

интерфейсов не достаточно, нужно чтобы классы наследовались
Даже никаких хитростей по этому поводу не придумали?
Автор: Omicron_Persey_8
Дата сообщения: 08.04.2009 15:37
avkorets
А я думал, ты Array юзаешь, а не ArrayList. Тогда можно делать так

Код: myBL = new ArrayList(myAL);
Автор: Lazy KoT
Дата сообщения: 08.04.2009 20:59
ziii
Посмотри здесь: Simulated Multiple Inheritance Pattern for C#
Автор: Omicron_Persey_8
Дата сообщения: 09.04.2009 08:37
ziii
Lazy KoT
Это задумка интрересная, но на фига оно надо??? Потребность в множественном наследовании реализаций (на С++) у меня возникала всего пару раз и то в институте и потому, что так было указано в задании.
Мне кажется, для более или менее крупного проекта сей паттерн малоприменим, хотя бы из-за того, что замучаешься классы-обертки выписывать, да и читаемости кода он не добавляет.
А чисто из любви к искусству - 5 баллов
Автор: ziii
Дата сообщения: 09.04.2009 11:35

Цитата:
из-за того, что замучаешься классы-обертки выписывать, да и читаемости кода он не добавляет

Может найдётся ещё что более жизнеспособное...
Ими микрософт в следующей версии добавит поддержку наследования...

Ато сейсас приходится много классов дублировать...
Автор: Omicron_Persey_8
Дата сообщения: 09.04.2009 11:45

Цитата:
Ато сейсас приходится много классов дублировать...

Это говорит скорее о недостаточной проработке иерархии классов
Автор: Lazy KoT
Дата сообщения: 09.04.2009 12:20
Omicron_Persey_8
Вот именно что только из-за любви к искусству. (:

ziii
Кончено гибкости больше при множественном наследовании, но на сколько я помню на С# _насущная_ потребность во множественном наследовании возникала только пару раз. Хотя, может быть, в твоем случае действительно необходимо множественное наследование... А может быть Omicron_Persey_8 истину глаголет. (; Примеры в студию?
Автор: Omicron_Persey_8
Дата сообщения: 09.04.2009 14:43

Цитата:
Примеры в студию?

Поддерживаю обеими руками!!!
Автор: NiFiGaSebe
Дата сообщения: 15.04.2009 10:39
Посоветуйте пожалуйста обфускатор. Мне необходимо использовать обфускатор в своей программе. Сейчас использую Eazfuscator.NET Assistant, но, я не знаю, толи я неправильно его использую, толи он так работает. Но он не переименовывает даже название функций, единственное, что он изменяет это строковые переменные. Я слышал есть обфускаторы, которые не только до неузнаваемости путают код, но после них программу уже нельзя открыть рефлектором.
Автор: Omicron_Persey_8
Дата сообщения: 15.04.2009 14:50
C MSVS идет Dotfucator Comunity Edition. Чем он не устраивает?
Вот статейка занимательная. От себя могу сказать, что применение обфускатора от взлома совсем не спасет, а вот затраченное на него время увеличить может. Сам сталкивался с "обфускаторенным" (вот загнул) кодом один раз, разбирал небольшую библиотечку, особенных трудностей не вызвало. Декомпилировал ее Reflector'ом, посидел в отладчике, применил метод Find/Replace. В этой библиотечке обфускации подвергались имена private'ных типов, их преобразовывали по порядку a(), b() и т. д. Трудностей не составило. Где-то еще читал о разработках систем, которые добавляют в сборку шифрующий модуль, который перед исполнением декодирует код. Но о практической реализации подобного ничего не знаю.
Автор: Lazy KoT
Дата сообщения: 16.04.2009 14:15
NiFiGaSebe
Вот что говорят гуру: http://forum.ru-board.com/topic.cgi?forum=55&topic=4881&start=320#9
Автор: Disperados
Дата сообщения: 23.04.2009 10:31
Есть Родительская Form1, через меню открываю диалоговое Form2


Цитата:

private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
Form 2frmForm2 = new Form2();
frmForm2.ShowDialog();

}


, задаю некие параметры, кнопкой открываю еще одну форму Form3(закрывая Form2) куда и передаю параметры,


Цитата:

private void simpleButton1_Click(object sender, EventArgs e)
{
Form3 frmForm3 = new Form3();
frmForm3.Show();
this.Close();


}


проблема в том, что Form3 не хочет становить дочерним по отношении к Form1.
Подскажите на пальцах или на примере как это можно решить.
Спасибо.

Автор: Omicron_Persey_8
Дата сообщения: 23.04.2009 12:40
Disperados
Я так понял, что из form1 вызывается form2, а из form2 уже вызывается form3?
Если так, то:
1. ShowDialog отличается от Show тем, что второй просто выводит окно на экран, а второй - выводит модальное окно. Так вот модальное не даст со стороны пользователя обращаться к другим окнам приложения, пока не будет закрыто. То есть, как в случае с form2. Судя по второму куску кода, сначала открывается form3 и тут же закрывается form2.
2. Чтобы указать форме родительскую форму со всеми вытекающими (типа закрытия всех дочерних окон при закрытии родительского) нужно явно заполнять свойство Owner. Если нужная форма из контекста не доступна (как из form2 обратиться к form1??), то можно воспользоваться Application.OpenForms, которое содержит все открытые окна. И, соответственно, зная значение свойства Name нужной формы, можно получить ее саму:

Код: Form3 frm = new Form3();
frm.Owner = Application.OpenForms["Form1"];
frm.Show();
Автор: Disperados
Дата сообщения: 23.04.2009 13:41

Цитата:
Form3 frm = new Form3();
frm.Owner = Application.OpenForms["Form1"];
frm.Show();

Решил проблему по другому, у меня формы обращаются через класс
frmForm3.MdiParent = ApplicationFormList.Form1Form;
ваш вариант приму к сведению, спасибо!
Автор: TeXpert
Дата сообщения: 23.04.2009 14:29
Omicron_Persey_8
Цитата:
Хочу попробовать себя в разработке под Mono
Тоже вопрос интересует. Может, тему откроешь?
Цитата:
Не мог бы кто-нибудь посоветовать с чего начать
Скачать самый последний (2.4) и попробовать собрать из исходников во инструкции отсюда
Цитата:
Installing Mono 2.4

Binary Packages and Source Code Downloads:

Source code and pre-compiled packages for Linux, Solaris,
MacOS X and Windows is available from our web site from
the Downloads section.
Quick source code installation:

If we have no packages for your platform, installing from
source code is very simple.
Compile libgdiplus to support System.Drawing:

$ tar xzf libgdiplus-2.4.tar.gz
$ cd libgdiplus-2.4
$ ./configure
$ make
$ make install

Then compile Mono itself:

$ tar xzf mono-2.4.tar.gz
$ cd mono-2.4
$ ./configure
$ make
$ make install

Цитата:
...что почитать
Хотя бы это: "Разница между версиями для Mono", там тоже есть про сборку из исходников. Почему из исходников? Существующие готовые сборки уж очень старые, даже самый последний дистрибутив SLES/SLED успел выйти раньше
Цитата:
...какой инструментарий существует
Есть специальный IDE, MonoDevelop. Вот интересно его попробовать
Автор: Skyer1
Дата сообщения: 23.04.2009 15:06
Здравствуйте, нужно ваша помощь у меня есть программа написанная на С++( нахождение палиндрома) нужно изменить ее, для запуска на С# я сам с синтаксисом языка плохо знаком, на С++ программа работает полностью.

[more=Код программы]
#include "stdafx.h"
#include <iostream.h>
using namespace std;

// Узнаём количество разрядов в числе
int numRasryad(int numRas)
{
int num1 = numRas,
i = 0;

while(num1 != 0){
num1 /= 10;
i++;
}
return i;
}

int main()
{
int number = 1,
num,
Ras,
z = 1,
size,
quadroSize = 100; // Менять значение для получения нужного результата, 10, 100, 1000. Круглые целые.

for(int quadro = 1; quadro < quadroSize; quadro++){
size = numRasryad(quadro * quadro);

// Создаём массив размером с количество разрядов в числе
// и инициализируем нулями
int *array = new int[size];
for(int i = 0; i < size; i++)
array[i] = 0;

size--;
// Дробим число и записываем его в массив
// по каждому разряду на элемент
for(int i = size; i >= 0; i--){
array[i] = (quadro * quadro) / number % 10;
number *= 10;
}

size++;
// Сравниваем по разрядам:
if(size == 1) // Для чисел с одним разрядом, от: 0 - 9
cout<<"Number: "<<quadro<<" Quadro = "<<quadro * quadro<<" - Palindrom."<<endl;
else if(size == 2){ // Для чисел с двумя разрядами, от: 10 - 99
if(array[0] == array[1])
cout<<"Number: "<<quadro<<" Quadro = "<<quadro * quadro<<" - Palindrom."<<endl;
}
else if(size == 3){ // Для чисел с тремя разрядами, от: 100 - 999
if(array[0] == array[2])
cout<<"Number: "<<quadro<<" Quadro = "<<quadro * quadro<<" - Palindrom."<<endl;
}
else if(size == 4){ // Для чисел с четырмя разрядами, от: 1000 - 9999
if(array[0] == array[3] && array[1] == array[2])
cout<<"Number: "<<quadro<<" Quadro = "<<quadro * quadro<<" - Palindrom."<<endl;
}
else
cout<<" Error: Sorry..."<<endl;

delete[] array;
number = 1;
}
cin>>z;
}
[/more]

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.