Если у вас длинные векторы и вы хотите перейти на C ++, вам может помочь следующий код (вместе с Rcpp
и функцией ffs
из strings.h
):
#include <Rcpp.h>
#include <strings.h>
using namespace Rcpp;
// [[Rcpp::export]]
Rcpp::IntegerVector lsb(const IntegerVector x)
{
IntegerVector res(x.size());
std::transform(x.begin(), x.end(), res.begin(), ffs);
return(res-1); # To start from 0
}
Сохраните код выше в виде файла, скажем lsb.cpp
, и скомпилируйте его, используя sourceCpp("lsb.cpp")
из пакета Rcpp
.
Это немного быстрее - по крайней мере для более длинных входных векторов, где издержки становятся незначительными
> x <- floor(runif(10000,1,2^31))
> microbenchmark::microbenchmark(f(x), g(x), lsb(x))
Unit: microseconds
expr min lq mean median uq max neval
f(x) 121.771 129.6360 168.91273 133.241 151.0110 1294.667 100
g(x) 36165.757 40508.1740 50371.45183 42608.686 60460.5270 94664.255 100
lsb(x) 25.767 26.8015 34.58856 33.035 35.2385 156.852 100
Всего не добавляют "новую форму" , добавляют к новому классу проекта и наследовали его от класса Формы.
Добавьте [System.ComponentModel.DesignerCategory("")]
атрибут перед классом UI для предотвращения активации разработчика при двойном щелчке.
Примечание, что включая System.ComponentModel
наверху файла и затем просто добавление атрибута как [DesignerCategory("")]
не будет работать (по крайней мере, не в Visual Studio 2010/2013). Необходимо использовать полное, квалифицированное к пространству имен имя типа атрибута.
Щелчок правой кнопкой по файлу проекта и выбор, открытый с, позволяют Вам устанавливать значения по умолчанию для открытия типов файлов.
Если Вы не хотите использовать разработчика, то не используйте его?
можно создать новую форму с нуля, без разработчика, генерирующего любой код путем создания нового пустого класса, и позволить классу наследоваться от System.Windows.Forms.Form
Затем VS.NET, вероятно, все еще укажет, что классом является Форма, и можно все еще открыть его в разработчике, если Вы хотите. (И отбрасывание управляет на нем).
Frederik, конечно ты прав, но не в одном факте. (об этом И.Дж. хотел знать) Как только вы унаследуете какой-либо компонент, студия попытается открыть его в дизайнерском редакторе. Это поведение визуальной студии по умолчанию.
Если дважды щелкнуть файл в обозревателе решений, откроется конструктор. Так что это действительно раздражает, если вы всегда получаете такой странный дизайнер для классов, которые просто унаследованы от Component, но не содержат никаких видимых вещей.
Единственное, что мне действительно помогло, так это установка этого атрибута: [System.ComponentModel.DesignerCategory ("")]
Я этого не знал =) такой классный совет!
У меня проблема с частичными классами MainForm. Затем он кричит: «Дубликат атрибута» ...
Кто-нибудь знает, как избежать открытия дизайнера в некоторых частичных файлах классов двойным щелчком (без ошибки дублирования атрибута при компиляции?)
Я думаю. Я обнаружил небольшую ошибку в VS2005 ... Установив атрибут DesignerCategory-Attribute для класса частичной формы, при сохранении в обозревателе решений отображается значок, идентифицирующий файл как файл C # (без формы).
Затем я помещаю комментарий (//) перед атрибутом - и он продолжает открывать файл в режиме просмотра кода. Также после закрытия и повторного открытия он хранится внутри как неконструируемая часть формы. Даже при повторном открытии полного решения.
Итак, я думаю, что в файле решения или проекта есть какая-то информация ...
... Я нашел это в файле .csproj: ...
<Compile Include="GUI\VFormMain_Test.cs">
</Compile>
<Compile Include="GUI\VFormMain_Theme.cs">
</Compile>
<Compile Include="Core\VTTEnv.cs" />
<Compile Include="GUI\VFormMain.cs">
<SubType>form</SubType>
</Compile>
...
Studio время от времени обновляется - затем снова обновляет файлы форм (дох) ... хорошо ... но, вероятно, есть обходной путь, чтобы избежать этого.
вырезать ... последнее изменение ... что-то нашел:
http://social.msdn.microsoft.com/Forums/en-US/csharpide/thread/64c77755-b0c1-4447-8ac9-b5a63a681b78
(назовите файл, который вы хотите открыть без конструктора в .Designer.cs)
(Да, вы должны назвать что-нибудь, чтобы переключить его на LOL) Кажется, работает.