Вы сделали бы это так же, как в Java:
function Metrics(params) {
this.statsd = new StatssD();
}
Единственное отличие состоит в том, что вам не нужно объявлять атрибут с его типом - просто инициализируйте свойство в конструкторе. достаточно.
Графические элементы управления просто не предназначены для обработки таких данных просто потому, что они станут неработоспособными. Даже если бы элемент управления мог обрабатывать большую строку, то, что видно в элементе управления, было бы настолько мало по сравнению со всем текстом, что полосы прокрутки стали бы практически бесполезными. Чтобы найти определенную строку в тексте, вам нужно будет переместить ползунок в ближайшее положение, которое он может указать, а затем прокрутить строку за раз в течение нескольких минут ...
Вместо того, чтобы отправлять своих пользователей на что-то вроде этого бесполезного, вам следует переосмыслить способ отображения данных, чтобы вы могли делать это таким образом, который действительно можно было бы использовать.
Думали ли вы о попытке сделать приложение многопоточным?
Какую часть текстового файла вам нужно видеть сразу? Вы можете изучить ленивую загрузку в .NET или, в вашем случае, на C #
Почему бы вам не добавить к строковой переменной (или, возможно, даже использовать StringBuilder), а затем присвоить значение свойству .Text, когда вы закончили синтаксический анализ?
Я заметил, что при использовании RichTextboxes, когда вы добавляете больше «строк», он начинает замедляться. Если вы можете сделать это, не добавляя '\ n', это ускорится для вас. Помните, что каждый '\ n' - это новый объектный блок абзаца для RichTextbox.
Это мой метод загрузки файла размером 10 МБ. Загрузка занимает около 30 секунд. Я использую диалоговое окно с индикатором выполнения, чтобы сообщить пользователю, что загрузка займет некоторое время.
// Get Stream of the file
fileReader = new StreamReader(File.Open(this.FileName, FileMode.Open));
FileInfo fileInfo = new FileInfo(this.FileName);
long bytesRead = 0;
// Change the 75 for performance. Find a number that suits your application best
int bufferLength = 1024 * 75;
while (!fileReader.EndOfStream)
{
double completePercent = ((double)bytesRead / (double)fileInfo.Length);
// I am using my own Progress Bar Dialog I left in here to show an example
this.ProgressBar.UpdateProgressBar(completePercent);
int readLength = bufferLength;
if ((fileInfo.Length - bytesRead) < readLength)
{
// There is less in the file than the lenght I am going to read so change it to the
// smaller value
readLength = (int)(fileInfo.Length - bytesRead);
}
char[] buffer = new char[readLength];
// GEt the next chunk of the file
bytesRead += (long)(fileReader.Read(buffer, 0, readLength));
// This will help the file load much faster
string currentLine = new string(buffer).Replace("\n", string.Empty);
// Load in background
this.Dispatcher.BeginInvoke(new Action(() =>
{
TextRange range = new TextRange(textBox.Document.ContentEnd, textBox.Document.ContentEnd);
range.Text = currentLine;
}), DispatcherPriority.Normal);
}
Я работаю над очень похожим проектом.
Проект влечет за собой загрузку большого текстового файла (максимальный размер примерно 120 МБ, но мы хотим увеличить) и последующее построение структуры текстового файла в виде дерева. При щелчке по узлу в дереве пользователь переходит к этой части текстового файла.
После разговора с большим количеством людей я думаю, что лучшим решением является создание своего рода "скользящего окна" просмотра, в котором вы загружаете только как столько текста, сколько пользователь может видеть за раз, в rtb.Text.
Итак ... скажем, загрузите весь файл в список, но поместите только 100 из этих строк в rtb.Text. Если пользователь прокручивает вверх, удалите нижнюю строку и добавьте строку текста вверху. Если они прокручиваются вниз, удалите верхнюю строку и добавьте строку текста внизу. Я получаю довольно хорошую производительность с этим решением. (50 секунд для загрузки файла размером 120 МБ)