小编Jak*_*ake的帖子

处理.Net线程中的泄漏

这实际上咬了我几次.如果你做这样的简单代码:

    private void button1_Click(object sender, EventArgs e)
    {

        for (int i = 0; i < 1000000; i++)
        {
            Thread CE = new Thread(SendCEcho);
            CE.Priority = ThreadPriority.Normal;
            CE.IsBackground = true;
            CE.Start();
            Thread.Sleep(500);
            GC.Collect();
        }
    }

    private void SendCEcho()
    {
        int Counter = 0;

        for (int i = 0; i < 5; i++)
        {
            Counter++;
            Thread.Sleep(25);
        }
    }
Run Code Online (Sandbox Code Playgroud)

运行此代码并观察手柄飞!Thread.Sleep是这样你可以关闭它,它不会接管你的电脑.这应该保证在下一个线程启动之前启动的线程死掉.调用GC.Collect(); 什么也没做.根据我的观察,这个代码在正常刷新时每次刷新任务管理器时都会丢失10个句柄.

无效SendCEcho()函数中的内容无关紧要,如果需要,则计为5.当线程死亡时,有一个手柄无法清理.

对于大多数程序而言,这并不重要,因为它们不会长时间运行.在我创建的一些程序中,它们需要运行数月和数月.

如果反复运用此代码,最终可能会将句柄泄漏到Windows操作系统变得不稳定的位置,并且它将无法运行.需要重新启动.

我确实通过使用线程池和这样的代码解决了这个问题:

ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadJobMoveStudy));
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么.Net中存在这样的泄漏,为什么它存在这么长时间?既然喜欢1.0?我在这里找不到答案.

.net c# multithreading

5
推荐指数
3
解决办法
1645
查看次数

.Net 4.0中的ISO_IR 58支持

在DICOM中有一个名为ISO_IR 58的双字节字符集.据我所知,.Net中的等效编码是gb2312.我试图用7位ASCII编码ISO_IR 58个字符,用于医疗系统之间的通信.

在java世界中,字符串gb2312用于执行此编码.

首先看一下ISO_IR 87的这个例子(ISO_IR 87等于.Net中的iso-2022-jp):

Encoding enc = Encoding.GetEncoding("iso-2022-jp");
byte[] bytes = enc.GetBytes("????^????=??^???");
string asciistring = ASCIIEncoding.ASCII.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)

这将获取输入字符串并给出ASCII字符串:$ B = v <} RT; 2(B ^ $ B5nRRRONR(B = $ B5Q @ j(B ^ $ BRHGnFn(B)

使用所有正确的转义序列,我可以正确使用它.

(实际的第一个转义字符不会显示在此处,但粘贴时其余的序列会显示)

如果我将此代码与ISR_IR 58中的字符一起使用:

Encoding enc = Encoding.GetEncoding("gb2312");
byte[] bytes = enc.GetBytes("????^????^????");
string asciistring = ASCIIEncoding.ASCII.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)

我只得到了字符串:???????? ^ ????????? ?????????

那么使用.Net的DICOM ISO_IR 58编码的答案是什么?我使用错误的字符串进行编码吗?.Net中不支持DICOM中的ISO_IR 58吗?.Net中有错误吗?它甚至可能吗?

.net c# encoding dicom

4
推荐指数
1
解决办法
346
查看次数

标签 统计

.net ×2

c# ×2

dicom ×1

encoding ×1

multithreading ×1