小编DxC*_*xCK的帖子

在Stream上应用正则表达式?

我正在寻找在Streams上应用正则表达式的快速而安全的方法.

我在互联网上找到了一些关于将每个缓冲区转换为String然后应用于Regex字符串的示例.

这种方法有两个问题:

  • 性能:转换为字符串和GC字符串是浪费时间和CPU,如果有一种更原生的方式应用于RegexStreams ,肯定可以避免.
  • Regex支持:Regex模式有时只有在将两个缓冲区组合在一起时才能匹配(缓冲区1以匹配的第一部分结束,缓冲区2以匹配的第二部分开始).转换为字符串的方式无法原生地处理这种类型的匹配,我必须提供更多信息,例如模式可以匹配的最大长度,这根本不支持+和*正则表达式标志,并且永远不会支持(无限制匹配)长度).

因此,转换为字符串的方式并不快,并且不完全支持Regex.

是否有任何方法/库可用于Regex在Streams 上应用而无需转换为字符串并具有完整的Regex支持?

.net c# regex streaming

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

Marshal.AllocHGlobal VS Marshal.AllocCoTaskMem,Marshal.SizeOf VS sizeof()

我有以下结构:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WAVEHDR
{
    internal IntPtr lpData;   // pointer to locked data buffer
    internal uint dwBufferLength; // length of data buffer
    internal uint dwBytesRecorded; // used for input only
    internal IntPtr dwUser;   // for client's use
    internal uint dwFlags;   // assorted flags (see defines)
    internal uint dwLoops;   // loop control counter
    internal IntPtr lpNext;  // reserved for driver
    internal IntPtr reserved;  // reserved for driver
}
Run Code Online (Sandbox Code Playgroud)

我需要分配非托管内存来存储上面结构的实例.指向此结构的指针将传递给waveOut win32 api函数(waveOutPrepareHeader,waveOutWrite,waveOutUnprepareHeader).

  1. 我应该使用Marshal.AllocHGlobal()Marshal.AllocCoTaskMem()?有什么不同?
  2. 我应该通过 …

.net c# winapi memory-management unmanaged

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

xcopy目录和子目录递归,并按扩展名仅过滤文件名

这就是我现在拥有的:

xcopy "c:\projects\SampleProject" "c:\temp\copytest" /E /H /EXCLUDE:elist.txt
Run Code Online (Sandbox Code Playgroud)

除了通过扩展名过滤文件名外,它完成了我需要的所有工作.

例如:*.exec:\temp\copytest子目录复制所有文件.

怎么做?

filenames filtering xcopy batch-file

23
推荐指数
2
解决办法
6万
查看次数

.NET 4.0 Runtime比.NET 2.0 Runtime慢吗?

在我将项目升级到.NET 4.0(使用VS2010)后,我意识到它们运行速度比在.NET 2.0(VS2008)中慢.所以我决定使用各种Target Frameworks对VS2008和VS2010中的简单控制台应用程序进行基准测试:

using System;
using System.Diagnostics;
using System.Reflection;

namespace RuntimePerfTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Assembly.GetCallingAssembly().ImageRuntimeVersion);
            Stopwatch sw = new Stopwatch();

            while (true)
            {
                sw.Reset();
                sw.Start();

                for (int i = 0; i < 1000000000; i++)
                {

                }

                TimeSpan elapsed = sw.Elapsed;
                Console.WriteLine(elapsed);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

  • VS2008
    • 目标框架2.0:约0.25秒
    • 目标框架3.0:~0.25秒
    • 目标框架3.5:~0.25秒
  • VS2010
    • 目标框架2.0:约3.8秒
    • 目标框架3.0:约3.8秒
    • 目标框架3.5:~1.51秒
    • Target Framework 3.5客户端配置文件:~3.8秒
    • 目标框架4.0:~1.01秒
    • Target Framework 4.0客户端配置文件:~1.01秒

我的初步结论显然是使用VS2008编译的程序比使用VS2010编译的程序运行得更快.

任何人都可以解释VS2008和VS2010之间的性能变化吗?在VS2010内部的不同目标框架之间?

.net performance benchmarking .net-4.0 visual-studio-2010

22
推荐指数
3
解决办法
8260
查看次数

如何减少.NET字符串密集型应用程序的内存占用?

出于性能原因,我的应用程序在内存中有大约1,000,000个字符串.我的应用程序消耗~200 MB RAM.

我想减少字符串消耗的内存量.

我知道.NET代表UTF-16编码的字符串(每个字符2个字节).我的应用程序中的大多数字符串都包含纯英文字符,因此以UTF-8编码存储它们的效率将是UTF-16的2倍.

有没有办法在UTF-8编码的内存中存储字符串,同时允许标准的字符串函数?(我的需求主要包括带StringComparison.OrdinalIgnoreCase的IndexOf).

.net c# string utf-8 utf-16

17
推荐指数
2
解决办法
5670
查看次数

C#volatile数组项?

我需要一个包含volatile项的数组,并且找不到这样做的方法.

private volatile T[] _arr;
Run Code Online (Sandbox Code Playgroud)

这意味着_arr引用是易失性的,但它不保证_arr对象本身内部的任何内容.

有没有办法将_arr的Items标记为volatile?

谢谢.

编辑:

以下代码根据二进制编码的答案构建.这段代码是否可以使用线程安全?

public class VolatileArray<T>
{
    private T[] _arr;

    public VolatileArray(int length)
    {
        _arr = new T[length];
    }

    public VolatileArray(T[] arr)
    {
        _arr = arr;
    }

    public T this[int index]
    {
        get
        {
            T value = _arr[index];
            Thread.MemoryBarrier();
            return value;
        }

        set
        {
            Thread.MemoryBarrier();
            _arr[index] = value;
        }
    }

    public int Length
    {
        get { return _arr.Length; }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# arrays multithreading volatile

14
推荐指数
2
解决办法
2899
查看次数

Panel中的MouseEnter和MouseLeave事件及其子控件

我有一个Panel包含子控件.

如果我处理PanelMouseEnterMouseLeave事件,并且其子的MouseEnterMouseLeave事件,该事件被触发顺序是:

Panel.MouseEnter
Panel.MouseLeave
Child1.MouseEnter
Child1.MouseLeave
Panel.MouseEnter
Panel.MouseLeave
Run Code Online (Sandbox Code Playgroud)

但我需要以下顺序:

Panel.MouseEnter
Child1.MouseEnter
Child1.MouseLeave
Panel.MouseLeave
Run Code Online (Sandbox Code Playgroud)

那可能吗?

.net c# mouseevent winforms

13
推荐指数
3
解决办法
2万
查看次数

编译一个只依赖于kernel32.dll和user32.dll的C++程序?

我正在使用Visual Studio 2005.

我想编译一个简单的程序,该程序可以与任何Windows 32位版本一起使用,而不依赖于安装的c ++运行时库版本.

该程序将在没有任何其他函数调用的情况下调用GetModuleHandleGetProcAddress函数,然后在退出代码是函数地址时退出.

如何编译只依赖于kernel32.dll和user32.dll的C++程序,而没有任何c ++运行时库?

c++ windows runtime visual-c++

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

在传递给非托管代码之前固定updateble结构?

我使用一些旧的API,需要将结构的指针传递给异步运行的非托管代码.

换句话说,在我将struct指针传递给非托管代码之后,非托管代码会复制指针并立即返回.非托管代码可以在后台访问该结构,在另一个线程中.我无法控制在另一个线程和线程本身中运行的非托管代码.

fixed {}语句不能用于固定,因为它不是为异步非托管固定而设计的.

GCHandle只能引用引用,因此必须将结构框设置为使用GCHandle.我尝试过,它的确有效.它的主要问题是您无法从托管代码更新结构.要更新结构,首先我们需要将其取消装箱,然后更新,然后再次装箱,但是......哎呀......再次装箱?!?这意味着内存中的前一个指针仍然指向旧的非最新结构,而新结构有另一个指针,这意味着我需要将新指针传递给非托管代码...不适用于我的案件.

如何在没有固定{}语句的情况下在内存中固定结构,以便我可以不更改指针的情况下从托管代码更新它?

谢谢.

编辑:

只是想...有没有办法固定包含结构的父对象,然后获取结构的指针而不是容器对象?

.net c# struct unmanaged pinning

10
推荐指数
2
解决办法
4851
查看次数

Windows 7自定义搜索提供程序的安全问题

我为Windows 7构建了一个搜索提供程序,在localhost上运行.(使用.osdx文件和RSS网站)返回的RSS中的元素包含本地文件路径.

例: <link>c:\windows\win.ini</link>

问题是搜索结果窗口中显示的文件带有以下消息:

由于您的Internet安全设置,此项目已被阻止

此项目因您的Internet安全设置而被阻止http://pasteboard.s3.amazonaws.com/images/1345314800731987.png

如何防止这种安全限制?

security search filepath windows-7 custom-search-provider

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