StringBuilder从另一个实例化一个新实例的最佳方法(性能方面)是什么?(复制Ctor)。
我不想通过不可变的字符串传递,因为下划线数据非常大。
所以下面的内容是有效的,但不是想要的。
StringBuilder newSB = new StringBuilder(oldSB.ToString());
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
StringBuilder newSB = new StringBuilder(oldSB);
Run Code Online (Sandbox Code Playgroud)
但这不受支持。
我正在优化我们的调试打印设施(类)。该类大致简单,具有全局“启用”布尔值和PrineDebug例程。
我正在研究该方法在“禁用”模式下的性能PrintDebug,尝试创建一个在不需要调试打印的情况下对运行时影响较小的框架。
在探索过程中,我发现了以下结果,这让我感到惊讶,我想知道我在这里错过了什么?
public class Profiler
{
private bool isDebug = false;
public void PrineDebug(string message)
{
if (isDebug)
{
Console.WriteLine(message);
}
}
}
[MemoryDiagnoser]
public class ProfilerBench
{
private Profiler profiler = new Profiler();
private int five = 5;
private int six = 6;
[Benchmark]
public void DebugPrintConcat()
{
profiler.PrineDebug("sometext_" + five + "_" + six);
}
[Benchmark]
public void DebugPrintInterpolated()
{
profiler.PrineDebug($"sometext_{five}_{six}");
}
}
Run Code Online (Sandbox Code Playgroud)
在 BenchmarkDotNet 下运行此基准测试..结果如下:
| Method | Mean | Error | …Run Code Online (Sandbox Code Playgroud) 我有一个使用VS2010 VSTO库构建的excel 2007加载项.当我创建一个新的加载项对象时,我还使用以下代码创建一个excel left任务窗格:
Microsoft.Office.Tools.CustomTaskPane taskPaneAddIn;
MyAddIn addIn;
addIn = new MyAddIn(this.Application);
taskPaneAddIn = this.CustomTaskPanes.Add(addIn, "My AddIn");
taskPaneAddIn.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionLeft;
taskPaneAddIn.Width = addIn.Size.Width + 5;
Run Code Online (Sandbox Code Playgroud)
addIn是一个具有自己维度的Windows用户控件.
上面的代码似乎不起作用,因为taskPaneAddIn宽度始终固定在excel上.用户始终必须手动展开任务窗格以查看控件的整个宽度.
是否有任何可编程方式来设置任务窗格宽度?
我遇到了一个说明MS c ++ stl容器在其clear()API中存在内存泄漏的说明(不记得在哪里).
因此,如果您有:
void main()
{
std::vector<int> vVec;
for(int i =0; i < 100; i++)
vVec.push_back(i);
vVec.clear();
}
Run Code Online (Sandbox Code Playgroud)
因此,在向量堆上分配的内存并未真正释放...
该笔记说(据我所记)以下技术确保内存真正发布......
void main()
{
std::vector<int> vVec;
for(int i =0; i < 100; i++)
vVec.push_back(i);
vVec.clear();
vector<int>(vVec).swap(vVec);
}
Run Code Online (Sandbox Code Playgroud)
你有这方面的经验吗?以上是真的吗?如果是的话,这里到底发生了什么?
(还有最后一个问题,抱歉,这对所有其他stl容器都是如此吗?)谢谢,
我有一个维护任务,可以将文件夹从一台服务器复制到另一台服 源文件夹很大 - 大约~Ks的文件/ 5-6树级别和整体大小~1GB.
我从Windows命令行使用Robocopy.exe和XCOPY.exe,它们的性能是公平的,我想知道是否有更快的工具来交付任务.
当然,实际性能高度依赖于网络过载,但我相信测试用例使用相同的环境.
我有一个简单的任务,即std::vector<int>使用一系列整数初始化一个.
范围由用户给出,我尽量避免使用for循环.
就像是:
void addRange(std::vector<int>& vReturn, int nStart, int nEnd)
{
vReturn.clear();
// straightforward solution
for (int nInteger = nStart; nInteger <= nEnd; nInteger++)
{
vReturn.push_back(nInteger);
}
//////////////////////////////////////////////
// Elegent Pseudo-Code
vReturn.add_range(nStart, nEnd); // <<- is this doable?
}
Run Code Online (Sandbox Code Playgroud) 我有一个表,其中包含使用字母数字、数字、点、下划线和方括号 [] 的 300K 字符串记录。
我使用 sqlite3 的 FTS5 扩展来实现对该表的快速搜索。这就是我创建 FTS 虚拟表的方式:
database = sqlite3.connect("mydb.db")
db_cursor = database.cursor()
db_cursor.execute("create virtual table field_names USING fts5 (full_path)")
Run Code Online (Sandbox Code Playgroud)
我在循环中使用以下代码添加 ~300K 记录:
database.execute("insert into field_names(full_path) values (?)", (field_path,))
Run Code Online (Sandbox Code Playgroud)
样本记录:
a.extbootrecord.field_db0
a.extbootrecord.field_db1
a.extbootrecord.field_db8
a.extbootrecord.field_db9
a.extbootrecord.field_db10
a.extbootrecord.field_db11
a.extbootrecord.field_db12
a.extbootrecord.field_db15
Run Code Online (Sandbox Code Playgroud)
使用以下查询:
db_cursor.execute("select full_path from field_names where field_names = '\"%s\"'" % search_phrase)
return_list = list()
entries = db_cursor.fetchmany(100)
while entries:
return_list.extend([entry[0] for entry in entries])
entries = db_cursor.fetchmany(100)
Run Code Online (Sandbox Code Playgroud)
与以下search_phrase产生以下结果:
ext : 没有什么extbootrecord : 所有记录extbootrecrd. …在 C# 中,对象方法可以调用对象自己的 d-tor 吗?并使对该对象的任何引用无效?
我正在尝试在内存系统中构建“对象控制”。用户可以“签出”对象,然后“完成”使用它(“签入”)。我需要确保一旦对象被“签入” - 用户代码中对它的任何引用都将变得无效。
这是一个图解情况
public class MyType
{
public object Object {get; private set;}
public MyType()
{
this.Object = new ... ; // initialize Object property
}
public void Finish()
{
// ... some work on this.Object
this.Object = null;
// this = null; <- kill myself ?
}
}
pubic class Consumer()
{
public void Method()
{
var myUsage = new MyType(); // underline Object is initialized
SomethingWith(myUsage.Object); // use underline Object
myUsage.Finish(); // …Run Code Online (Sandbox Code Playgroud) 我正在尝试检查字符串是否包含有效的十六进制数字。
我正在使用检查字符串是否是十六进制数字的有效替代中记录的方法。
使用以下代码:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int temp;
bool b = int.TryParse("0x5", System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out temp);
System.Console.Write("{0} : {1}", b, temp);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到:False : 0在输出。
怎么了
这可能是一个简单的答案。
我有一个文本小部件,我想将任何字母数字键盘键(a-zA-Z0-9_ 和其余常规键)绑定到特定方法,并将Ctrl+F绑定到另一个方法。
使用widget.bind("<Key>", method)将创建以下内容:
method两次,一次用于Ctrl( event.keysym = Control_L, event.char = None),第二次用于F( event.keysym = f, event.char = <invalid>)method( event.keysym = f, event.char = f)有没有办法区分这两种情况?
I have a Regex that match multiple option.
E.g. ^0x[\da-fA-F]+|-?\d+$ -- a Regex for Match either decimal or hex literals
Is there an option to know which option was eventually match the pattern?
so for...
-10 - the decimal option was matched0x1Af - the hex option was matchedc# ×5
c++ ×2
windows ×2
c#-4.0 ×1
c++11 ×1
command-line ×1
excel ×1
filesystems ×1
fts5 ×1
memory ×1
performance ×1
python ×1
python-3.x ×1
regex ×1
sqlite ×1
std ×1
string ×1
tkinter ×1
vsto ×1
xcopy ×1