我正在寻找在Streams上应用正则表达式的快速而安全的方法.
我在互联网上找到了一些关于将每个缓冲区转换为String然后应用于Regex字符串的示例.
这种方法有两个问题:
RegexStreams ,肯定可以避免.Regex支持:Regex模式有时只有在将两个缓冲区组合在一起时才能匹配(缓冲区1以匹配的第一部分结束,缓冲区2以匹配的第二部分开始).转换为字符串的方式无法原生地处理这种类型的匹配,我必须提供更多信息,例如模式可以匹配的最大长度,这根本不支持+和*正则表达式标志,并且永远不会支持(无限制匹配)长度).因此,转换为字符串的方式并不快,并且不完全支持Regex.
是否有任何方法/库可用于Regex在Streams 上应用而无需转换为字符串并具有完整的Regex支持?
我有以下结构:
[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).
Marshal.AllocHGlobal()或Marshal.AllocCoTaskMem()?有什么不同?这就是我现在拥有的:
xcopy "c:\projects\SampleProject" "c:\temp\copytest" /E /H /EXCLUDE:elist.txt
Run Code Online (Sandbox Code Playgroud)
除了通过扩展名过滤文件名外,它完成了我需要的所有工作.
例如:*.exe从c:\temp\copytest子目录复制所有文件.
怎么做?
在我将项目升级到.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编译的程序比使用VS2010编译的程序运行得更快.
任何人都可以解释VS2008和VS2010之间的性能变化吗?在VS2010内部的不同目标框架之间?
出于性能原因,我的应用程序在内存中有大约1,000,000个字符串.我的应用程序消耗~200 MB RAM.
我想减少字符串消耗的内存量.
我知道.NET代表UTF-16编码的字符串(每个字符2个字节).我的应用程序中的大多数字符串都包含纯英文字符,因此以UTF-8编码存储它们的效率将是UTF-16的2倍.
有没有办法在UTF-8编码的内存中存储字符串,同时允许标准的字符串函数?(我的需求主要包括带StringComparison.OrdinalIgnoreCase的IndexOf).
我需要一个包含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) 我有一个Panel包含子控件.
如果我处理Panel的MouseEnter和MouseLeave事件,并且其子的MouseEnter和MouseLeave事件,该事件被触发顺序是:
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)
那可能吗?
我正在使用Visual Studio 2005.
我想编译一个简单的程序,该程序可以与任何Windows 32位版本一起使用,而不依赖于安装的c ++运行时库版本.
该程序将在没有任何其他函数调用的情况下调用GetModuleHandle和GetProcAddress函数,然后在退出代码是函数地址时退出.
如何编译只依赖于kernel32.dll和user32.dll的C++程序,而没有任何c ++运行时库?
我使用一些旧的API,需要将结构的指针传递给异步运行的非托管代码.
换句话说,在我将struct指针传递给非托管代码之后,非托管代码会复制指针并立即返回.非托管代码可以在后台访问该结构,在另一个线程中.我无法控制在另一个线程和线程本身中运行的非托管代码.
fixed {}语句不能用于固定,因为它不是为异步非托管固定而设计的.
GCHandle只能引用引用,因此必须将结构框设置为使用GCHandle.我尝试过,它的确有效.它的主要问题是您无法从托管代码更新结构.要更新结构,首先我们需要将其取消装箱,然后更新,然后再次装箱,但是......哎呀......再次装箱?!?这意味着内存中的前一个指针仍然指向旧的非最新结构,而新结构有另一个指针,这意味着我需要将新指针传递给非托管代码...不适用于我的案件.
如何在没有固定{}语句的情况下在内存中固定结构,以便我可以在不更改指针的情况下从托管代码更新它?
谢谢.
编辑:
只是想...有没有办法固定包含结构的父对象,然后获取结构的指针而不是容器对象?
我为Windows 7构建了一个搜索提供程序,在localhost上运行.(使用.osdx文件和RSS网站)返回的RSS中的元素包含本地文件路径.
例: <link>c:\windows\win.ini</link>
问题是搜索结果窗口中显示的文件带有以下消息:
由于您的Internet安全设置,此项目已被阻止
此项目因您的Internet安全设置而被阻止http://pasteboard.s3.amazonaws.com/images/1345314800731987.png
如何防止这种安全限制?
.net ×7
c# ×6
unmanaged ×2
.net-4.0 ×1
arrays ×1
batch-file ×1
benchmarking ×1
c++ ×1
filenames ×1
filepath ×1
filtering ×1
mouseevent ×1
performance ×1
pinning ×1
regex ×1
runtime ×1
search ×1
security ×1
streaming ×1
string ×1
struct ×1
utf-16 ×1
utf-8 ×1
visual-c++ ×1
volatile ×1
winapi ×1
windows ×1
windows-7 ×1
winforms ×1
xcopy ×1