这是一个危险的问题,所以让我试着正确地说出来.过早优化是所有邪恶的根源,但如果你知道你需要它,那么应该考虑一套基本的规则.这套是我想知道的.
例如,假设您有几千个项目的列表.如何查找具有特定ID的项目?当然,您只需使用Dictionary将ID映射到项目.
如果您知道存储在数据库中的设置始终是必需的,那么您只需缓存它而不是每秒发送数百次数据库请求.
甚至可以像在prod中使用发行版而不是调试版本一样简单.
我想还有一些更基本的想法.
我特别不是在寻找"不要这样做,对于专家:不要这样做"或"使用探查器"的答案,但对于非常简单的一般提示.如果你觉得这是一个争论性的问题,你可能会误解我的意图.
我也不是在寻找任何项目的具体建议,也不是任何复杂的低级技巧.可以将其视为如何避免作为初学者所犯的最重要的性能错误的概述.
编辑:这可能是我正在寻找的一个很好的描述:为具有基本技术理解的人创建一个共同优化规则的演示文稿(不是一个实际例子)(假设他们获得了CS学位)但由于某种原因从未写了一行代码.指出最重要的方面.伪代码很好.不要假设特定语言甚至架构.
显然,.net中没有预定义的列表.
我想使用一些标准颜色,例如红色,绿色,蓝色,黄色......,即由00和FF组件组成的典型颜色,其次是带有额外7F组件的颜色,......
有没有办法检索这些"标准"颜色,还是我必须自己写IEnumerable<Color>?
编辑:这是RGB值的可能输出.
请注意,集合的顺序很重要,在添加80之前必须完成00/FF枚举,并且在添加40/B0之前必须完成00/80/FF枚举,依此类推.集合中的顺序无关紧要(即00 FF 00可能在00 00 FF之前).
00 00 00 // start out with 00 and FF components
00 00 FF
00 FF 00
FF 00 00
FF FF 00
FF 00 FF
00 FF FF
FF FF FF
00 00 80 // ok, now add 80
00 80 00
...
80 80 80
FF 00 80
FF 80 00
FF 80 80
80 FF 00
80 FF 80
FF …Run Code Online (Sandbox Code Playgroud) 我一直在寻找2小时或更好的方法来使用Read7BitEncodedInt方法.我需要以某种方式使用它来减少我的文件大小(在这种情况下可能减少100mb或更多).我也在考虑使用ReadString方法,因为它似乎做了大致相同的事情.但这似乎不太合适,我不确定它会起作用.如果还有其他替代方案,我不知道我也愿意使用它.
总结.如何将Read7BitEncodedInt方法实现为以下代码?另外,我不太确定我的Write7BitEncodedInt方法也是正确的.
public void SaveFile()
{
using (FileStream stream = new FileStream("C:\\A_random.txt", FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
for (int i = 0; i < typeCount.Count; i++)
{
writer.Write((byte)typeCount[i]);
writer.Write(type[i]);
}
writer.Close();
}
}
LoadFile();
}
public void LoadFile()
{
using (FileStream stream = new FileStream("C:\\A_random.txt", FileMode.Open))
{
using (BinaryReader reader = new BinaryReader(stream))
{
int i = 0;
while (stream.Position != stream.Length)
{
int count = reader.Read7BitEncodedInt();
byte val = reader.ReadByte();
for (int ii = 0; …Run Code Online (Sandbox Code Playgroud) 显然,PictureBox类在设置其Image属性时不提供事件.有没有办法仍然可以通过子类化来捕获这样的变化?
我只对msil操作码等感兴趣.通常我用C#编程并尝试使用Reflection.Emit/MethodBuilder动态生成方法,但这需要操作码.
所以如果有可能通过将C#解析为msil并在方法构建器中使用它来动态生成方法,我感兴趣吗?
那么可以通过使用反射和C#代码在运行时动态生成方法吗?
鉴于是两个IEnumerable<A> a和IEnumerable<B> b.保证它们具有相同的长度.我想创建一个新的IEnumerable<C> c,其中每个项目c_i使用Func<A, B, C> fby 派生c_i := f (a_i, b_i).
我能想到的最好的是两个源的手动同时枚举,并产生当前结果,作为扩展方法实现.如果没有.NET> = 4.0中的自定义代码,有没有简短的方法呢?
我在以下 Julia 1.8 代码中收到红色警告
\nmutable struct S\n X::Int32\n const Children::Vector{Ref{S}}\nend\n\nfunction f2(s::Ref{S})\n x = Int32(0)\n \n chs = s[].Children\n for ch in chs\n add = ch[].X\n x += add\n end\n\n println("f2: $(x)")\nend\n\nfunction test()\n s = S(3, Vector{Ref{S}}())\n @code_warntype f2(Ref{S}(s))\nend\ntest()\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nMethodInstance for f2(::Base.RefValue{S})\n from f2(s::Ref{S}) in Main at example.jl:7\nArguments\n #self#::Core.Const(f2)\n s::Base.RefValue{S}\nLocals\n @_3::Union{Nothing, Tuple{Ref{S}, Int64}} (green)\n chs::Vector{Ref{S}}\n x::Any (red)\n ch::Ref{S} (red)\n add::Any (red)\nBody::Nothing\n1 \xe2\x94\x80 (x = Main.Int32(0))\n\xe2\x94\x82 %2 = Base.getindex(s)::S \n\xe2\x94\x82 (chs = Base.getproperty(%2, :Children))\n\xe2\x94\x82 %4 = chs::Vector{Ref{S}}\n\xe2\x94\x82 (@_3 …Run Code Online (Sandbox Code Playgroud) 正则表达式对Web Designer(XHTML/CSS)有用吗?如果网页设计师学习正则表达式,他们能获得任何帮助吗?
这应该是一个非常简单的问题,但我似乎无法找到正确的解决方案.格式中有一个字符串:
A:B=C;D:E=F;G:E=H;...
Run Code Online (Sandbox Code Playgroud)
而A,B和C是字母数字(并且可以更低,也可以是大写).A和B的长度为1+,C可以为空.
我想我必须使用类似的东西
((?<A>.+):(?<B>.+)=(?<C>.*);)*
Run Code Online (Sandbox Code Playgroud)
但我不知道如何以懒惰的方式使它匹配.我也不确定如何获得相应匹配的结果,所以我很感激一些代码示例.
如果你能给我一个提示,我会很高兴的.
我想测试一个简短的字符串列表中是否包含某个字符串.目前代码是这样的:
if (new List<string> { "A", "B", "C" }.Contains (str)) {
Run Code Online (Sandbox Code Playgroud)
然而,这看起来很臃肿.例如,iirc,在Java中我可以简单地写出{"A", "B", "C"}.Contains(str)哪个比上面更好.
我确信在C#中有更好的方法.你能指出来吗?
c# ×6
.net ×4
linq ×2
regex ×2
7-bit ×1
binary ×1
binarywriter ×1
cil ×1
colors ×1
contains ×1
dynamic ×1
enumeration ×1
julia ×1
list ×1
methods ×1
numbers ×1
optimization ×1
picturebox ×1
sequence ×1
string ×1