I переводил проект с .net 6 на .net 8 и столкнулся с проблемой с производительностью процессора при использовании readerwriterlockslim . С .net 8 потребление процессора намного выше (в 4-5x выше), чем .net 6. Я использовал ниже образца кода для проверки производительности ЦП: < /p>
Пример кода, используемый для тестирования был сгенерирован с использованием CHATGPT: < /p>
public class ReaderWriterSlimTests
{
private static readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
private static int _sharedResource = 0;
private static readonly int ReaderCount = Environment.ProcessorCount * 2;
private static readonly int WriterCount = Environment.ProcessorCount / 2;
private static readonly int Iterations = 1_000_000;
private static volatile bool _running = true;
public void RunTests()
{
Console.WriteLine($"Running test on .NET {Environment.Version}");
Console.WriteLine($"Readers: {ReaderCount}, Writers: {WriterCount}, Iterations: {Iterations}");
Stopwatch stopwatch = Stopwatch.StartNew();
Process process = Process.GetCurrentProcess();
TimeSpan startCpuTime = process.TotalProcessorTime;
Thread[] readers = new Thread[ReaderCount];
Thread[] writers = new Thread[WriterCount];
// Start readers
for (int i = 0; i < ReaderCount; i++)
{
readers = new Thread(ReaderTask);
readers.Start();
}
// Start writers
for (int i = 0; i < WriterCount; i++)
{
writers = new Thread(WriterTask);
writers.Start();
}
// Run for a few seconds
Thread.Sleep(30000);
_running = false;
// Wait for all threads to finish
foreach (var reader in readers) reader.Join();
foreach (var writer in writers) writer.Join();
stopwatch.Stop();
TimeSpan endCpuTime = process.TotalProcessorTime;
double cpuUsage = (endCpuTime - startCpuTime).TotalMilliseconds / stopwatch.ElapsedMilliseconds * 100;
Console.WriteLine($"Elapsed Time: {stopwatch.ElapsedMilliseconds} ms");
Console.WriteLine($"CPU Usage Approximation: {cpuUsage:F2}%");
}
private void ReaderTask()
{
while (_running)
{
_lock.EnterReadLock();
var value = _sharedResource; // Simulate read
_lock.ExitReadLock();
}
}
private void WriterTask()
{
Random rnd = new Random();
while (_running)
{
_lock.EnterWriteLock();
_sharedResource = rnd.Next(); // Simulate write
_lock.ExitWriteLock();
}
}
}
< /code>
Если я запускаю этот код в .net 6, использование процессора составляет около 300%. Тот же код в .NET 8 составляет около 1800%. Кроме того, в будущем, как исправить эту проблему в .net 8? < /P>
Спасибо
vik < /p>
Подробнее здесь: https://stackoverflow.com/questions/793 ... erlockslim
.NET 8, вызывая перегрузку ЦП при использовании readerwriterlockslim ⇐ C#
Место общения программистов C#
1738137935
Anonymous
I переводил проект с .net 6 на .net 8 и столкнулся с проблемой с производительностью процессора при использовании readerwriterlockslim . С .net 8 потребление процессора намного выше (в 4-5x выше), чем .net 6. Я использовал ниже образца кода для проверки производительности ЦП: < /p>
Пример кода, используемый для тестирования был сгенерирован с использованием CHATGPT: < /p>
public class ReaderWriterSlimTests
{
private static readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
private static int _sharedResource = 0;
private static readonly int ReaderCount = Environment.ProcessorCount * 2;
private static readonly int WriterCount = Environment.ProcessorCount / 2;
private static readonly int Iterations = 1_000_000;
private static volatile bool _running = true;
public void RunTests()
{
Console.WriteLine($"Running test on .NET {Environment.Version}");
Console.WriteLine($"Readers: {ReaderCount}, Writers: {WriterCount}, Iterations: {Iterations}");
Stopwatch stopwatch = Stopwatch.StartNew();
Process process = Process.GetCurrentProcess();
TimeSpan startCpuTime = process.TotalProcessorTime;
Thread[] readers = new Thread[ReaderCount];
Thread[] writers = new Thread[WriterCount];
// Start readers
for (int i = 0; i < ReaderCount; i++)
{
readers[i] = new Thread(ReaderTask);
readers[i].Start();
}
// Start writers
for (int i = 0; i < WriterCount; i++)
{
writers[i] = new Thread(WriterTask);
writers[i].Start();
}
// Run for a few seconds
Thread.Sleep(30000);
_running = false;
// Wait for all threads to finish
foreach (var reader in readers) reader.Join();
foreach (var writer in writers) writer.Join();
stopwatch.Stop();
TimeSpan endCpuTime = process.TotalProcessorTime;
double cpuUsage = (endCpuTime - startCpuTime).TotalMilliseconds / stopwatch.ElapsedMilliseconds * 100;
Console.WriteLine($"Elapsed Time: {stopwatch.ElapsedMilliseconds} ms");
Console.WriteLine($"CPU Usage Approximation: {cpuUsage:F2}%");
}
private void ReaderTask()
{
while (_running)
{
_lock.EnterReadLock();
var value = _sharedResource; // Simulate read
_lock.ExitReadLock();
}
}
private void WriterTask()
{
Random rnd = new Random();
while (_running)
{
_lock.EnterWriteLock();
_sharedResource = rnd.Next(); // Simulate write
_lock.ExitWriteLock();
}
}
}
< /code>
Если я запускаю этот код в .net 6, использование процессора составляет около 300%. Тот же код в .NET 8 составляет около 1800%. Кроме того, в будущем, как исправить эту проблему в .net 8? < /P>
Спасибо
vik < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/79396043/net-8-causing-cpu-overload-when-using-readerwriterlockslim[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия