Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Sayanchik777
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529

Обертка класса, наследование - скорость работы

16.05.2018, 03:24. Показов 2575. Ответов 17

Студворк — интернет-сервис помощи студентам
1. Есть класс MyServer(использует класс TcpListener), как только MyServer ловит какое то соединение, он возвращает ссылку на экземпляр класса MyNewClient (использует класс TcpClient) который уже работает в новом потоке.
2. Есть Класс MyGameBase (Класс принимает уже подключенного MyNewClient и проверяет есть ли в базе данных его логин и пароль, если есть то должен возвратить этого MyNewClient-а, но уже с с данными из базы: ранг, деньги и так д.).

MyGameBase - должен возвращать:
-Красиво было бы MyNewClient обернуть и назвать MyNewGameClient(тот самый только уже с полями инициализированы инфой с базы данных) - но смущает что раз много оберток то это плоха искажается на производительности.
-Еще думаю создать класс MyNewGameClient и наследоваться от MyNewClient, так мне нужно не все методы унаследовать.
-и еще одна идея, сделать пустыми поля в классе MyNewClient , и когда он пройдет через класс MyGameBase , то на выходе вернет тот же MyGameBase экземпляр только уже с данными с базы.

Вопрос: как лучше поступить что бы сервер работал более быстрее? или может есть свои варианты?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2018, 03:24
Ответы с готовыми решениями:

Обертка класса и combobox
Здравствуйте. Вопрос такой. Получаю данные из БД и запихиваю в экземпляр класса DataLoad. Лист из полученных значений я прикрепляю в...

Скорость работы id и класса
Что быстрее работает id или класс? Бывают такие моменты, что думаешь, а что лучше использовать. Да понятно если стиль повторяется много...

Потестируйте скорость работы класса больших чисел
Ребятки, сделал себе небольшой классик для больших чисел. Типа того: static const long long BASE = 1000000000; static const int...

17
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,335
16.05.2018, 06:58
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
как лучше поступить что бы сервер работал более быстрее?
Нужно найти и оптимизировать "узкие" места в коде.

Цитата Сообщение от Sayanchik777 Посмотреть сообщение
или может есть свои варианты?
Возможно есть.
0
 Аватар для Sayanchik777
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
16.05.2018, 07:00  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Нужно найти и оптимизировать "узкие" места в коде.
а как это узкие места?
0
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,335
16.05.2018, 07:03
Sayanchik777, это участок сильно медленного кода больше всего сказывающийся на общей производительности.
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
16.05.2018, 09:24
Лучший ответ Сообщение было отмечено Sayanchik777 как решение

Решение

Цитата Сообщение от Sayanchik777 Посмотреть сообщение
-Красиво было бы MyNewClient обернуть и назвать MyNewGameClient(тот самый только уже с полями инициализированы инфой с базы данных) - но смущает что раз много оберток то это плоха искажается на производительности.
Нормально. Более того - это правильно, использовать инструменты ООП в опном языке. На падении производительности множественные "обертки" почти не сказываются, а если и сказываются, то это ничтожно по сравнению с теми операциями, которые делаются в них (например, создание нового потока и пр), впрочем это сравнение даже некорректно, тк обертка может повлиять на производительность лишь косвенно. Единственное, на мой взгляд, на чем она может отразиться - это на скорости jit-компиляции и на объеме, занимаемом программой в оперативной памяти (скажем, какие-то лишние 1000 байт, что тоже ничтожно на фоне 4Гб оперативы, так что хоть 1000 оберток делай, не страшно)

Цитата Сообщение от Usaga Посмотреть сообщение
Нужно найти и оптимизировать "узкие" места в коде.
Usaga скорее всего имел профайлер (есть в VS2012 и выше). Так же можно использовать Stopwatch для поэтапного замера скорости работы кода, чтобы определить, где программа "притормаживает". Одно другого не исключает. Если профайлер показывает резкий рост нагрузки на оперативную память - смотреть это место, может память надо почистить: лишние объекты удалить, циклы оптимизировать и т д
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.05.2018, 10:22
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
Красиво было бы MyNewClient обернуть и назвать MyNewGameClient(тот самый только уже с полями инициализированы инфой с базы данных)
Для этого вполне типично применяется агрегация, когда твой MyNewGameClient не наследуется от MyNewClient, а включает его в себя, как свойство.
1
 Аватар для Sayanchik777
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
16.05.2018, 16:04  [ТС]
Цитата Сообщение от aquaMakc Посмотреть сообщение
Для этого вполне типично применяется агрегация, когда твой MyNewGameClient не наследуется от MyNewClient, а включает его в себя, как свойство.
Можете пожалуйста привести пример - написать код? Просто на выходе у меня должен быть MyNewClient и плюс еще поля которых нет в MyNewClient

Добавлено через 2 минуты
Цитата Сообщение от netBool Посмотреть сообщение
Так же можно использовать Stopwatch для поэтапного замера скорости работы кода, чтобы определить, где программа "притормаживает"
Если бы вы не ответили так развернуто, я бы о таком даже и не знал бы. Спасибо большое!!!!
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.05.2018, 16:25
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
Можете пожалуйста привести пример - написать код? Просто на выходе у меня должен быть MyNewClient и плюс еще поля которых нет в MyNewClient
Очень напоминает паттерн Декоратор
0
 Аватар для Sayanchik777
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
16.05.2018, 16:55  [ТС]
Цитата Сообщение от netBool Посмотреть сообщение
Так же можно использовать Stopwatch для поэтапного замера скорости работы кода
как пользоваться замером скорости? дайте пожалуйста источник на русском, в ютубе нахожу только как делают какие то секундомеры)
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.05.2018, 17:00
Sayanchik777, серьёзно? запускаем стопвотч в начале кода, останавливаем после и смотрим сколько времени код выполнялся. 4 команды - создать, запустить, остановить, узнать сколько времени от старта прошло.
Официальная документация.
1
 Аватар для Sayanchik777
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
16.05.2018, 17:10  [ТС]
ааа... а я думал это какая то панель в студии)) типа отладки))
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
16.05.2018, 17:18
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
как пользоваться замером скорости? дайте пожалуйста источник на русском, в ютубе нахожу только как делают какие то секундомеры)
Для изучения шарпа лучше пользоваться первоисточниками - я имею в виду msdn. Документация по .NET почти вся переведена на русский. Там же есть и примеры использования. Привожу один из них, немного переделав:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopWatch = Stopwatch.StartNew();//старт
        Thread.Sleep(1500);
        stopWatch.Stop();//стоп
        //берем замеренное время в TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;
 
        // отображаем результаты в консоли
        string elapsedTime = String.Format(
            "{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,ts.Milliseconds);
        Console.WriteLine("RunTime " + elapsedTime);
 
        Console.ReadKey();
    }
}
0
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,335
16.05.2018, 17:23
Вообще, сейчас в студии родные средства умеют профилировать производительность и в код добавлять Stopwatch уже нет никакой необходимости.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.05.2018, 17:27
Цитата Сообщение от Usaga Посмотреть сообщение
в код добавлять Stopwatch уже нет никакой необходимости
Ну почему же. Все мы знаем, что сборки Debug и Release имеют разную производительность. Профилировать из студии Release запускаемого проекта не получится, а тем-более службы. В таких случаях Stopwatch`и + логирование помогает. Не уверен насчёт BenchmarkDotNet, как-то руки не дошли его попользовать.
Знаю, что тут сидят люди, его применяющие - его можно использовать для проверки производительности релизных сборок служб?
0
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,335
16.05.2018, 17:29
Полагаю, что профилировать надо отладочную сборку, так как если уж она будет работать приемлемо, то релизная и подавно.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.05.2018, 17:36
Цитата Сообщение от Usaga Посмотреть сообщение
Полагаю, что профилировать надо отладочную сборку
Кстати, я был не прав. Профилирование из студии как-раз в Release и выполняется.
0
 Аватар для Sayanchik777
9 / 9 / 6
Регистрация: 09.05.2015
Сообщений: 529
16.05.2018, 22:14  [ТС]
ааа... а я думал это какая то панель в студии)) типа отладки))
Цитата Сообщение от aquaMakc Посмотреть сообщение
В таких случаях Stopwatch`и + логирование помогает.
а как делать логирование? простите за тупые вопросы
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.05.2018, 23:21
Цитата Сообщение от Sayanchik777 Посмотреть сообщение
а как делать логирование?
как хочешь. хошь в консоль, хошь в текстовое поле на формочке, хошь в файл
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2018, 23:21
Помогаю со студенческими работами здесь

Обертка для класса TRegistry не работает как положено
Работая с классом TRegistry сталкиваюсь со следующей проблемой: Пишу вот такую обертку h файл class RegGeneralForm { public: ...

Обертка над boost::lexical_cast для работы с unsigned типами
Пару дней назад выяснилось, что boost::lexical_cast не удовлетворяет нескольким требованиям в моей программе. boost::lexical_cast...

Наследование от protected класса: будут ли public члены класса Б доступны классу А
Добрый день! Если пронаследовать public класс А от protected класса Б, будут ли public члены класса Б доступны классу А, и доступны...

Наследование: Как мне определить любой из методов заданного класса внутри другого класса?
Добрый день, подскажите пожалуйста, что я делаю не так Есть файл Container.h в котором храню прототипы методов class Container ...

Объявление класса, создание экземпляров класса. Наследование классов
Вообщем начал делать программу:"Создать класс Матрицы, обеспечивающего размещение матрицы произвольного размера с возможность изменения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru