Показать сообщение отдельно
Старый 30.04.2015, 17:55   #21 (Ссылка на пост)
ПВО
Что-то высматривает
Пол:
 
Активность Longevity
7/20 12/20
Today Сообщения
1/5 ssssss187
Благодарил(а): 122
Благодарили 55 раз в 33 постах
Галерея: 0
Вес репутации: 9 ПВО станет скоро известным
Ребята, вы точно наши, а не из гарварда пишите?

Привожу код, а в комментарии еще буду вникать.

В целом так:

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";

        }
    }
}
Изображения
 
ПВО вне форума  
Ответить с цитированием