为什么正则表达式的输入长度不会影响性能,这怎么可能?
生成的字符串如下:128个随机字符.括号内有两个数字.这个重复了很多次.
128 radnom characters....(-2435346|45436) 128 radnom characters....(-32525562|-325346)
Run Code Online (Sandbox Code Playgroud)
正则表达式获取括号内的所有数字.这是模式.
\(([-+]?\d+\|[-+]?\d+)\)
Run Code Online (Sandbox Code Playgroud)
所以比赛就像
-2435346|45436
-32525562|-325346
etc...
Run Code Online (Sandbox Code Playgroud)
以下是执行基准测试的代码.我在生成输入后启动秒表,因为我只想评估匹配时间.
Random rand = new Random();
Func<string> getRandString = // generates 128 random characters.
() => Enumerable.Range(0, 128).Select(x => (char) rand.Next()).Aggregate("", (a, b) => a + b);
Func<int> getRandInteger = () => rand.Next(); // generates random number.
string format = "{0}({1}|{2})";
// Generate the big string.
StringBuilder bigstr = new StringBuilder();
for (int i = 0; i < 100; i++) // repeat 100 times.
{
bigstr.Append(string.Format(format, …Run Code Online (Sandbox Code Playgroud) 当我使用OpenFileDialog“打开文件”时,当然我需要获取文件目录及其名称来加载文件。(要加载xml,要访问文件,我需要完整路径。)
opd是打开文件对话框
if (opd.ShowDialog() == true)
{
var names = opd.FileNames;
foreach (string name in names)
{
LoadFile(Path.Combine(Path.GetDirectoryName(name), name));
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何Path.GetDirectoryName通过仅获取字符串来获取文件的路径?
Path.GetDirectoryName(name)
Run Code Online (Sandbox Code Playgroud)
name是 Juststring并且此方法仅通过字符串获取其目录?。计算机内可能有数千个同名文件。
简短问题:在哪里opd 引用?
编辑:
我认为opd.FileNames只需要文件名。(因为方法名称)
我还发现了一些有趣的事情。
LoadFile(Path.Combine(Path.GetDirectoryName(name), name));
Run Code Online (Sandbox Code Playgroud)
这工作正常,因为Path.Combine只会跳过字符串的相同部分。
前任:
string name = @"C:\Users\Default\xml.xml";
string getDirNameResault= Path.GetDirectoryName(name);// this will be C:\Users\Default
Run Code Online (Sandbox Code Playgroud)
所以 Path.Combine 将是
Path.Combine(@"C:\Users\Default", @"C:\Users\Default\xml.xml)
Run Code Online (Sandbox Code Playgroud)
女巫归来"C:\Users\Default\xml.xml"!
为什么我不允许使用我在里面声明的变量do并在whiledo/while循环中使用它?
do
{
index += index;
int composite = index + 1;
// more code here
} while (UnsetBitmask(bitmasks, composite)); // cannot resolve symbol composite
Run Code Online (Sandbox Code Playgroud)
我第一次看到这个,我认为这是一个编译器错误.所以我多次重启Visual Studio但仍然无法识别变量while.
代码有什么问题,或者这是编译器错误?
这是我的代码:
<StackPanel>
<StackPanel.Resources>
<Style x:Key="stlNavButtonBorder" TargetType="Border">
<Setter Property="BorderBrush" Value="#570000FF" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="Height" Value="100" />
<Setter Property="Width" Value="200" />
<Setter Property="Margin" Value="10" />
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="BorderBrush.Color"
To="blue"
Duration="0:0:0.25"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="BorderBrush.Color"
To="#570000FF"
Duration="0:0:0.25" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseDown">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="BorderBrush.Color"
To="Black"
Duration="0:0:0.25" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
<Style x:Key="stlNavButtonRectangle" TargetType="Rectangle">
<Setter Property="Fill" Value="#570000FF"/>
</Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Style="{StaticResource …Run Code Online (Sandbox Code Playgroud) 目前我有Visual Studio 17 V 15.4.2
是否可以为项目设置不同的构建路径?例如,而不是
C:\Users\[UserName]\source\repos\[MyProject]\[bin|obj]
继续前进
M:\Users\[UserName]\source\repos\[MyProject]\[bin|obj]
请注意,将其自身项目放在内部,C但临时文件会移动到其他位置.我的驱动器M是一个16GB的ram磁盘.
使用RAM磁盘的好处:(诱使我这样做的原因)
更快的构建时间(没有真正的IO)
SSD不会因重复重建而磨损.
项目本质上是清理的(带来以下好处)
分享更快,您的项目没有填充不必要的文件,以便您可以轻松地与他人共享文件夹.(代码大小通常小于1MB,但构建对象可以超过1GB)
快速备份,出于同样的原因,您的项目文件夹始终保持清理状态,您可以更快地备份项目.(特别是当你有很多项目时,例如你只能备份100MB而不是10GB)
创建锁定文件的机会较少.(这会导致构建不同步,错误等)在这种情况下格式化ramdisk比使用VS设置或重新启动它更容易.
缺点:
你需要更多的RAM,在我的情况下我有32GB,我可以为它节省16GB.
如果你重置VS或计算机,你松散编译对象,你必须重建(一次)
但使用RAM磁盘的好处显然超重了它的缺点.
好的,既然我说服了你,为什么我想要这个给我路径:)
我写了一段代码。我想确保我以正确的方式处理对象。
我有一个像这样的一次性类,用于从非托管资源读取一些数据。
class MyFileReader : IDisposable
{
private readonly FileStream _stream;
public MyFileReader(FileStream stream)
{
_stream = stream;
}
public void Dispose()
{
_stream.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
目前在我的程序中,我像这样处理对象。
using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (MyFileReader reader = new MyFileReader(stream))
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎没问题。后来我注意到类是通过引用传递的,所以也许如果我处理其中一个,就不需要处理另一个。
我的问题是我可以做这样的事情吗?
using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
MyFileReader reader = new MyFileReader(stream);
// Remove IDisposable from MyFileReader and stream will close after using.
}
Run Code Online (Sandbox Code Playgroud)
还是这个?
FileStream stream = …Run Code Online (Sandbox Code Playgroud) 我想知道是否使用更好的做法:
var a = b.Substring(6);
Run Code Online (Sandbox Code Playgroud)
要么
var a = b.Remove(0,6);
Run Code Online (Sandbox Code Playgroud)
哪一个效率更高/更快?显然,子字符串有更多选项可供您选择,但Remove()无法做到。.很抱歉,如果这是新手问题,我对C#还是陌生的
我有一个很大的困难.我有问题要回答:为了正确,MyClass应该具备哪些功能?
var myVariable = new MyClass { 25 };
Run Code Online (Sandbox Code Playgroud)
自周五以来我试图找到答案,但我还没有结果.你有什么想法吗?
考虑一下我有两个原子布尔,如下所示。
private:
std::atomic_bool x;
std::atomic_bool y;
Run Code Online (Sandbox Code Playgroud)
我可以说以下操作是原子的吗?还是我必须用来lock_guard确保将它们分配在一起?
x = y = true; // are two bools assigned together atomically?
Run Code Online (Sandbox Code Playgroud)
还考虑在另一个线程中我想读取这些布尔值。
if(!x && !y) ...
Run Code Online (Sandbox Code Playgroud)
我的假设是,这不是原子的,也许更好用atomic<int>吗?
如何可能?
switch (param.ParameterType)
{
case Type x when x == typeof(byte):
int invalid;
break;
case Type x when x == typeof(short):
int invalid;
break;
case Type x when x == typeof(int):
break;
case Type x when x == typeof(long):
break;
}
Run Code Online (Sandbox Code Playgroud)
问题是,如何x在每个案例范围内没有任何可见的块.同时,变量invalid不能在不同的开关情况下声明.它必须在一个街区内.
如果没有阻塞那么接下来的变量范围是不可能的.
{
// case byte:
Type x;
int invalid;
// break;
// case short:
Type x; // x can not be declared twice.
int invalid;
}
Run Code Online (Sandbox Code Playgroud)
如果每种情况都有隐形块,则必须遵循以下规则(但不是).
{
{ // block for each case. …Run Code Online (Sandbox Code Playgroud)