powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как часто вы пишете using?
22 сообщений из 22, страница 1 из 1
Как часто вы пишете using?
    #39854913
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оператор, а не директиву.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854914
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 90% случаев использования экземпляров соответствующих классов
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854917
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А оно надо? Код получается перегруженным, со многими вложенностями. Не красиво!Shocker.Proв 90% случаев использования экземпляров соответствующих классов
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854923
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter,

несколько using'ов можно заключить под 1 скобки, если что
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854924
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

GC итак все почистит, кроме классов с "unmanaged resources", где закрывать их нужно явно. А в общем случае, как понять, какие класс левой библиотеки используют "unmanaged resources"? Не исходники-же поднимать. Или таки писать using "нафсякей"?
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854925
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это если между экземплярами нету зависимостей друг от друга.Roman MejtesRelic Hunter,

несколько using'ов можно заключить под 1 скобки, если что
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854934
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterGC итак все почистит, кроме классов с "unmanaged resources", где закрывать их нужно явно. А в общем случае, как понять, какие класс левой библиотеки используют "unmanaged resources"? Не исходники-же поднимать. Или таки писать using "нафсякей"?
в общем случае если реализован интерфейс IDisposablе - то надо его использовать с using, иначе никакие using конечно не нужны
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854938
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда, если есть такая возможность (например, поле класса, реализующее IDisposable, в using завернуть не получится никак).
Relic HunterА оно надо? Код получается перегруженным, со многими вложенностями. Не красиво!
У меня нет никаких вложенностей:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
using var ms = new MemoryStream(bytes);
Console.WriteLine("Memory stream created");
using var xr = XmlReader.Create(ms);
Console.WriteLine("XML reader created");
using var fs = new FileStream("xml.xml", FileMode.Create);
Console.WriteLine("File stream created");
using var xw = XmlWriter.Create(fs, new XmlWriterSettings
{
  Indent = true,
  IndentChars = "  ",
  NewLineOnAttributes = true
});
Console.WriteLine("XML writer created");
xw.WriteNode(xr, true);


Relic HunterЭто если между экземплярами нету зависимостей друг от друга.
Не вижу никаких проблем:
Код: c#
1.
2.
3.
4.
5.
using(
  IDisposable fs = new FileStream("xml.xml", FileMode.Create),
  xw = XmlWriter.Create((Stream)fs)
)
  xmlDocument.Save((XmlWriter)xw);


Relic HunterGC итак все почистит, кроме классов с "unmanaged resources", где закрывать их нужно явно.
Вопрос в том, когда он это сделает.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854949
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterА оно надо? Код получается перегруженным, со многими вложенностями. Не красиво!используй C# 8, там учли твои пожелания, вложенности на юзингах можно не создавать
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854957
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше писать полные скобки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
  using (var compressedFileStream = new MemoryStream())
                // using (FileStream compressedFileStream = new FileStream(@"C:\Users\antonov\Desktop\1\release.zip", FileMode.CreateNew))
                // через FileStream  файл сохраняется корректно


                //Create an archive and store the stream in memory.
                using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Create, true))
                {
                    foreach (var (filebytes, filename) in fileList)
                    {
                        //Create a zip entry for each attachment
                        var zipEntry = zipArchive.CreateEntry(filename);

                        //Get the stream of the attachment
                        using (var originalFileStream = new MemoryStream(filebytes))
                        using (var zipEntryStream = zipEntry.Open())
                        {
                            //Copy the attachment stream to the zip entry stream
                            await originalFileStream.CopyToAsync(zipEntryStream);
                        }
                    }
                    return new FileContentResult(compressedFileStream.ToArray(), "application/zip") { FileDownloadName = "Files.zip" };
                    //пробовал  менять "application/zip" на "application/octet-stream"- не помогает
                }


не работало,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  using (var compressedFileStream = new MemoryStream())
                {
                    using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Create, true))
                    {                  
                        foreach (var (filebytes, filename) in fileList)
                        {
                            //Create a zip entry for each attachment
                            var zipEntry = zipArchive.CreateEntry(filename);

                            //Get the stream of the attachment
                            using (var originalFileStream = new MemoryStream(filebytes))
                            using (var zipEntryStream = zipEntry.Open())
                            {
                                //Copy the attachment stream to the zip entry stream
                                await originalFileStream.CopyToAsync(zipEntryStream);
                            }
                        }                      
                    }
                    return new FileContentResult(compressedFileStream.ToArray(), "application/zip") { FileDownloadName = "Files.zip" };
                }


работало.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854975
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterGC итак все почистит, кроме классов с "unmanaged resources", где закрывать их нужно явно. А в общем случае, как понять, какие класс левой библиотеки используют "unmanaged resources"? Не исходники-же поднимать. Или таки писать using "нафсякей"?сегодня не использует, завтра использует, ты при каждом обновлении будешь исходники переанализировать?
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854986
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterоператор, а не директиву.

не очень часто, обычно всё инкапсулировано в DI.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39854989
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttне очень часто, обычно всё инкапсулировано в DI.а, блин, про ДИ-то я и забыл. Вышеуказанные 90% - это только для тех типов, которые инстанцируются локально.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855101
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterGC итак все почистит, кроме классов с "unmanaged resources", где закрывать их нужно явно.
Шаблон Disposable применяется именно для освобождения неуправляемых ресурсов. Сборщик мусора не имеет о них представления. Поэтому их освобождение нужно делать в Dispose/Финализаторе. А класс с финализатором в результате сборки мусора сперва попадёт в очередь финализации, потом после неё опять будет нуждаться в сборке... В итоге это бьёт и по потреблению памяти, и может сильно сказаться на производительности приложения в целом. Эти проблемы с финализацией обсуждались уже многократно.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855105
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordв общем случае если реализован интерфейс IDisposablе - то надо его использовать с using
Оно как бы и да, но, например, класс System.Threading.Tasks.Task тоже реализует IDisposable, но где-то в документации прямо говорится, что у этого класса вызывать Dispose не нужно. Потому что он ничего не делает. Зачем добавлен? Видимо, на всякий случай: вдруг в будущем понадобится.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855112
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subлучше писать полные скобки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var compressedFileStream = new MemoryStream())
using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Create, true))
{
    foreach (var (filebytes, filename) in fileList)
    {
        ...
    }
    return new FileContentResult(compressedFileStream.ToArray(), "application/zip") { FileDownloadName = "Files.zip" };
}


не работало,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
using (var compressedFileStream = new MemoryStream())
{
    using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Create, true))
    {
        foreach (var (filebytes, filename) in fileList)
        {
            ...
        }
    }
    return new FileContentResult(compressedFileStream.ToArray(), "application/zip") { FileDownloadName = "Files.zip" };
}


работало.

Эти два куска кода действуют по разному. В разное время происходит сброс буфера (Flush). Хотя да, не совсем интуитивно.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855136
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныRelic HunterЭто если между экземплярами нету зависимостей друг от друга.
Не вижу никаких проблем

Некоторая проблема есть.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var conn = new SqlConnection("..."))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    using (var reader = cmd.ExecuteReader())
    {
        //...
    }
}


Вот это con.Open(); нарушает красоту . Не получится тут все юзинги объединить в один блок.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855137
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример когда using лаконичнее чем без него
без using:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
FileStream fstream = null;
try
{
    fstream = new FileStream(@"D:\note3.dat", FileMode.OpenOrCreate);
    // операции с потоком
}
catch(Exception ex)
{
 
}
finally
{
    if (fstream != null)
        fstream.Close();
}


с using:
Код: c#
1.
2.
3.
4.
using (FileStream fstream = new FileStream(@"D:\note.dat", FileMode.OpenOrCreate))
{
      // операции с потоком
}
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855198
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikВот это con.Open(); нарушает красоту
Вспоминается анекдот про "неаккуратненько как-то, доктор".
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855309
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikНекоторая проблема есть.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var conn = new SqlConnection("..."))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    using (var reader = cmd.ExecuteReader())
    {
        //...
    }
}


Вот это con.Open(); нарушает красоту . Не получится тут все юзинги объединить в один блок.
Вообще при закрытии коннекции, она попросту возвращается в пул, а вот если не закрывать, количество свободных в пуле быстро закончится и никакой GC не спасет.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855317
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikСон Веры Павловныпропущено...

Не вижу никаких проблем

Некоторая проблема есть.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var conn = new SqlConnection("..."))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    using (var reader = cmd.ExecuteReader())
    {
        //...
    }
}



Вот это con.Open(); нарушает красоту . Не получится тут все юзинги объединить в один блок.
Вот проблема так проблема :)

Вынесите создание открытого соединения куда-нибудь и будет вам счастье.
Или возьмите Dapper и будет вообще один using.
...
Рейтинг: 0 / 0
Как часто вы пишете using?
    #39855321
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikНекоторая проблема есть.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using (var conn = new SqlConnection("..."))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    using (var reader = cmd.ExecuteReader())
    {
        //...
    }
}



Проблема в том, что такой код не подходит для продакшена.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как часто вы пишете using?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]