Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Создание компонента для отображения работы GC
Производительность .NET-приложений зависит от множества факторов среди которых и сборщик мусора (GC - Garbage Collector). В этой статье мы переделаем компонет отображения FPS для демонстрации работы GC.

Переделки минимальны, класс System.GC уже содержит необходимые нам счетчики, нам нужно только отобразить их.

Добавим новый класс GcProfiler -

GcProfiler класс
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class GcProfiler
{
static readonly int maxGens = GC.MaxGeneration;
static readonly StringBuilder sb = new StringBuilder("GCs:");
 
public static string GenerationsText
{
get
{
sb.Remove(4, sb.Length-4);
 
for (int i = 0; i <= maxGens; i++)
{
sb.Append(" Gen");
sb.Append(i);
sb.Append(":");
sb.Append(GC.CollectionCount(i));
}
 
return sb.ToString();
}
}
}

 

В методе FrameRateCounter.Draw(GameTime gameTime) добавим код отрисовки показаний сборщика мусора -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public override void Draw(GameTime gameTime)
{
frameCounter++;
 
// обновленный код
string fps = string.Format("fps: {0}, {1} ", frameRate, GcProfiler.GenerationsText);
 
spriteBatch.Begin();
 
spriteBatch.DrawString(spriteFont, fps, new Vector2(33, 33), Color.Black);
spriteBatch.DrawString(spriteFont, fps, new Vector2(32, 32), Color.White);
 
spriteBatch.End();
}
 


Обновим шрифт - Font.spritefont

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   <?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<FontName>Arial</FontName>
<Size>14</Size>
<Spacing>2</Spacing>
<Style>Regular</Style>
<CharacterRegions>
<CharacterRegion><Start>f</Start><End>f</End></CharacterRegion>
<CharacterRegion><Start>p</Start><End>p</End></CharacterRegion>
<CharacterRegion><Start>s</Start><End>s</End></CharacterRegion>
<CharacterRegion><Start>:</Start><End>:</End></CharacterRegion>
<CharacterRegion><Start> </Start><End> </End></CharacterRegion>
<CharacterRegion><Start>0</Start><End>9</End></CharacterRegion>
<CharacterRegion><Start>G</Start><End>G</End></CharacterRegion>
<CharacterRegion><Start>e</Start><End>e</End></CharacterRegion>
<CharacterRegion><Start>n</Start><End>n</End></CharacterRegion>
<CharacterRegion><Start>C</Start><End>C</End></CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>

 

Вот и все. Если показания GCs постоянно увеличиваются - есть смысл пересмотреть логику выделения памяти под новые объекты.

Ссылки по теме -

Поля класса GC, в котором реализованы методы управления сборщиком мусора. Информация дана для общего обзора, так как режим управления памятью желательно оставлять по умолчанию а выделение памяти под новые объекты следует контролировать различными видами пулов (ObjectPool).

 

Public-свойства
MaxGeneration Максимальное количество поддерживаемых в управляющей памяти поколений. Статическое
Public-методы
AddMemoryPressure Уведомление среды выполнения о резервировании большого объема неуправляемой памяти, который необходимо учесть при планировании работы сборщика мусора. Статический
Collect Перегруженный. Активизирует процесс сборки мусора. Сборка происходит в отдельном потоке. Поэтому время начала деятельности сборщика остается неопределенным. Статический
CollectionCount Определяет общее количество проходов сборщика для данного поколения объектов. Статический
Equals Определение эквивалентности объектов.
GetGeneration Перегруженный. Возвращает значение номера поколения, содержащего данный объект. Статический
GetTotalMemory Возвращает количество байт, занятых под объекты в управляющей памяти. В зависимости от значения параметра типа bool учитываются (или не учитываются) результаты деятельности сборщика мусора в момент выполнения метода. Сборщик мусора работает в теневом потоке, и в принципе можно немножко подождать результатов его работы. Статический
KeepAlive Ссылается на указанный объект, делая его недоступным для сборщика мусора с момента начала текущей программы до вызова этого метода. Статический
RemoveMemoryPressure Информирует среду выполнения об освобождении области неуправляемой памяти. Эта информация может быть полезна сборщику мусора для планирования работы. Статический
SuppressFinalize Метод обеспечивает уведомление сборщика мусора о том, что данный объект (представляется ссылкой в параметре метода) не подлежит удалению. Статический
ReRegisterForFinalize Сначала защищаем объект от GC путем вызова метода SuppressFinalize. А теперь снимаем с объекта эту защиту. Статический
WaitForPendingFinalizers Приостанавливает текущий поток до тех пор, пока поток, обрабатывающий очередь финализаторов, не обработает всю очередь. Статический

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,04 секунд 8,709,536 уникальных посетителей