C# Модуль верхнего уровня занимает огромное количество самостоятельного процессораC#

Место общения программистов C#
Ответить
Anonymous
 C# Модуль верхнего уровня занимает огромное количество самостоятельного процессора

Сообщение Anonymous »

Я недавно заметил, когда тестировал свой проект C# на оборудовании с более низким спектром, он работал очень медленно. Для контекста, это игра FNA, использующая свои возможности 3D-рисования. где модуль верхнего уровня занимает 20% самостоятельного процессора "src =" https://i.sstatic.net/bhnt7udz.png "/>
Что происходит в этом разделе Self CPU? Куда идут эти циклы?
Это часть 3D -рендеринга FNA? И если да, то почему он отображается там в анализаторе производительности, а не в соответствующих методах? 2:
ниже представлена тестовая игра FNA с аналогичным количеством вершинных буферов и вершин, как и мой настоящий проект. Не существует пользовательского кода, кроме показанного кода. Единственная ссылка на проект - это проект fna.core. < /P>

Код: Выделить всё

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace FNAPerformanceTest {
public class TestGame : Game {

static void Main(string[] args) {
using (TestGame g = new TestGame()) {
g.Run();
}
}

List Buffers = new();

GraphicsDeviceManager graphics;

BasicEffect effect;

public TestGame() {
graphics = new GraphicsDeviceManager(this);
}

protected override void Initialize() {

Random r = new Random();

for(int a = 0; a < 200; ++a) {

List vertices = new();

for(int b = 0; b < 4096; ++b) {
vertices.Add(new VertexPositionColor(new Vector3(r.NextSingle(), r.NextSingle(), r.NextSingle()), new Color(r.NextSingle(), r.NextSingle(), r.NextSingle())));
vertices.Add(new VertexPositionColor(new Vector3(r.NextSingle(), r.NextSingle(), r.NextSingle()), new Color(r.NextSingle(), r.NextSingle(), r.NextSingle())));
vertices.Add(new VertexPositionColor(new Vector3(r.NextSingle(), r.NextSingle(), r.NextSingle()), new Color(r.NextSingle(), r.NextSingle(), r.NextSingle())));
}

VertexBuffer buffer = new VertexBuffer(GraphicsDevice, typeof(VertexPositionColor), vertices.Count, BufferUsage.WriteOnly);
buffer.SetData(vertices.ToArray());
Buffers.Add(buffer);
}

effect = new BasicEffect(GraphicsDevice);

base.Initialize();
}

protected override void Draw(GameTime gameTime) {

foreach (var buffer in Buffers) {

GraphicsDevice.SetVertexBuffer(buffer);

foreach (EffectPass pass in effect.CurrentTechnique.Passes) {
pass.Apply();
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, buffer.VertexCount / 3);
}
}

base.Draw(gameTime);
}
}
}
Это профиль производительности, который создает:


Подробнее здесь: https://stackoverflow.com/questions/797 ... f-self-cpu
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»