小编sil*_*oon的帖子

clr.dll!LogHelp_TerminateOnAssert在.NET 4.0进程中

背景: 我正在开发基于WinForm的.NET 4.0桌面应用程序,该应用程序具有很少的线程和计时器,并使用一些GDI处理来进行用户控制.在开发过程中,我经常窥视sysinternal的Process Explorer,以确保我的应用程序没有任何异常,例如GDI句柄数或用户对象等.

问题: 使用Process Explorer时,我发现Process Explorer 中我的应用程序属性的Threads选项卡显示了很多很多条目"clr.dll!LogHelp_TerminateOnAssert + 0x58f68".这是正常的吗?我认为这不是因为非其他.net应用程序(我以前编写的)在Process Explorer的属性中显示相同的条目.

什么是LogHelp_TerminateOnAssert()?(我相信它是clr.dll中的一个函数)

为什么LogHelp_TerminateOnAssert()被调用了这么多次?

任何指针都会非常有用.

提前致谢.

c#-4.0

19
推荐指数
2
解决办法
5126
查看次数

在C#中的特定时间后退出循环

我的项目(C#,VS2010,.NET 4.0)要求特定for循环必须在200毫秒内完成.如果没有那么它必须在此持续时间之后终止而不执行剩余的迭代.循环通常i = 0达到约500,000到700,000,因此总循环时间变化.

我读过以下类似的问题,但在我的案例中没有帮助:

  1. 在C++中经过30ms的时间之后退出循环的最佳方法是什么
  2. 如何在特定时间执行循环

到目前为止,我已经尝试使用一个Stopwatch对象来跟踪已用时间,但它对我不起作用.到目前为止,我尝试了两种不同的方法:

方法1.比较for循环中的经过时间:

Stopwatch sw = new Stopwatch();
sw.Start();

for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
      // Do some stuff
      ...
      ...
      ...

      if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
          break;
}

sw.Stop();
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为完成if (sw.Elapsed > TimeSpan.FromMilliseconds(200))时间超过200毫秒.因此在我的情况下毫无用处.我不确定是否 TimeSpan.FromMilliseconds()通常需要这么长时间,或者仅仅因为某些原因而在我的情况下.

方法2.创建一个单独的线程来比较时间:

Stopwatch sw = new Stopwatch();
sw.Start();                    
bool bDoExit = false;
int msLimit = 200;

System.Threading.ThreadPool.QueueUserWorkItem((x) => …
Run Code Online (Sandbox Code Playgroud)

c# benchmarking

11
推荐指数
1
解决办法
2万
查看次数

clr.sll!StrongNameSignature验证CPU消耗

我有一个C#(.NET 4.0)WinForm应用程序,它不断地与基于Linux的应用程序通信,每秒几次从它接收一些数据.当我看到' clr.sll!StrongNameSignatureVerification '为此应用程序消耗大量CPU时,我一直在微调这个WinForm应用程序以减少它的高CPU使用率.我使用Process Explorer找到了这个.一些谷歌搜索告诉我'clr.sll!StrongNameSignatureVerification'正在进行中,因为CLR正试图验证这是否是一个强命名的程序集(我不想要CLR).

在我对此进行进一步研究之后,我尝试使用Microsoft SDK中的sn.exe来跳过此WinForm应用程序的签名验证.我收到一个错误,说这不是一个强名称的汇编.我并没有感到惊讶,因为我没有签署此应用程序或不记得设置任何应该调用CLR来验证此应用程序的签名.

我在.net应用程序安全方面的经验几乎为零,所以我正在寻找一些关于此问题的帮助.任何指针都会有所帮助.

提前致谢.

c# verification assemblies

8
推荐指数
1
解决办法
1841
查看次数

Form.Show()间歇地在线程中显示表单

我需要在打开文件时显示进度对话框,这是一项耗时的操作.为此,我在我的打开文件函数中使用以下内容:

           //some code
           ...
           ...
           ...
           bool done = false;

            //Show progress in a separate thread. 
            System.Threading.ThreadPool.QueueUserWorkItem((x) =>
            {
                using (var progressDialog = new ProgressDialog())
                {
                    progressDialog.TopMost = true;
                    progressDialog.Show();

                    while (!done)
                    {
                        if(progressDialog.Message != this.strProgressMsg)
                            progressDialog.Message = this.strProgressMsg;

                        Application.DoEvents();
                    }

                    progressDialog.Close();
                }
            });

           ....
           ....
           done = true;
           ....
           ....
Run Code Online (Sandbox Code Playgroud)

问题: 进度条对话框显示一些时间,有时则不显示.我的文件打开功能在主线程中运行.有人可以指出我正确的检测为什么会发生这种情况?

c# multithreading

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