Ребята, вы точно наши, а не из гарварда пишите?
Привожу код, а в комментарии еще буду вникать.
В целом так:
1. Определяем размер свободной части ОЗУ
2. Высчитываем, сколько туда поместится строк текста
3. Если процессор не загружен, записываем в переменную строку
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace mg
{
public partial class Form1 : Form
{
PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
PerformanceCounter cpuCounter = new PerformanceCounter();
int cpucnt;
string[] stringArray;
string str;
int arrlenght;
int ramfree;
int i = 1;
public Form1()
{
InitializeComponent();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
str = textBox1.Text;
ramfree = (int)ramCounter.NextValue();
label_memory.Text = ramfree+"MB";
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked) timer1.Enabled = true; else timer1.Enabled = false;
textBox1.Text = str;
}
private void timer1_Tick(object sender, EventArgs e) // Каждые 10 милисекунд дописываем строку в память
{
cpucnt = (int)cpuCounter.NextValue(); // Определяем загрузку процессора
if (cpucnt < 35)
{
arrlenght = (int)ramfree*1024*1024 / (textBox1.Text.Length*2+10); // Определяем - сколько в памяти поместится нужных строк
arrlenght = (int)arrlenght / 10;
// stringArray = new string[arrlenght];
label_arr.Text = "Допуст. кол. в массиве: " + arrlenght.ToString();
label_txt_nb.Text = textBox1.Text.Length.ToString();
if ( i+100 < arrlenght )
{
// stringArray[i - 1] = textBox1.Text; // Сначала я записывал строку в массив
for (int n = 0; n < 100; n++) { str = str + textBox1.Text; } // Потом дописывал строку в переменную стринг
i = i + 100;
}
// stringArray = null;
if (i >= arrlenght) { i = 1; str = null; }
}
}
private void timer_renew_Tick(object sender, EventArgs e) // Каждую секунду обновляем показания на форме
{
label_cpu.Text = cpucnt + "%";
label_i.Text = "i = " + i;
ramfree = (int)ramCounter.NextValue();
label_free_2.Text = ramfree+"MB";
}
}
}