我正在用PHP编写一个解析器,它必须能够处理大型内存中的字符串,所以这是一个有点重要的问题.(请不要"过早优化"火焰我,请)
该substr
功能如何运作?它是否在内存中生成字符串数据的第二个副本,还是引用原始数据?我应该担心,例如,$str = substr($str, 1);
在循环中调用吗?
我注意到在C#中,与C++不同,您可以组合虚拟和通用方法.例如:
using System.Diagnostics;
class Base {
public virtual void Concrete() {Debug.WriteLine("base concrete");}
public virtual void Generic<T>() {Debug.WriteLine("base generic");}
}
class Derived : Base {
public override void Concrete() {Debug.WriteLine("derived concrete");}
public override void Generic<T>() {Debug.WriteLine("derived generic");}
}
class App {
static void Main() {
Base x = new Derived();
x.Concrete();
x.Generic<PerformanceCounter>();
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到任意数量的版本Generic<T>
可以被实例化,它看起来并不像标准vtbl
的方法可以用于解决方法调用,实际上它不是.这是生成的代码:
x.Concrete();
mov ecx,dword ptr [ebp-8]
mov eax,dword ptr [ecx]
call dword ptr [eax+38h]
x.Generic<PerformanceCounter>();
push 989A38h
mov ecx,dword ptr [ebp-8]
mov edx,989914h …
Run Code Online (Sandbox Code Playgroud) 从这里查看此引用,在页面底部.(我相信引用的关于const
s的评论也适用于invariant
s)
枚举与consts的不同之处在于它们不消耗最终输出对象/库/可执行文件中的任何空间,而consts则不会.
因此显然value1
会使可执行文件膨胀,而value2
被视为文字并且不会出现在目标文件中.
const int value1 = 0xBAD;
enum int value2 = 42;
Run Code Online (Sandbox Code Playgroud)
回到C++我总是认为这是出于遗留原因,以及无法优化常数的旧编译器.但如果在D中仍然如此,那么必然会有更深层次的原因.谁知道为什么?
由于许多J2ME手机的(非常烦人)限制,音频文件在完全下载之前无法播放.因此,为了播放实时流,我不得不一次下载块,并构建ByteArrayInputStream
s,然后我将其提供给玩家.
这很有效,除了每次流结束时需要大约1/4秒的烦人间隙并且需要新的间隙.有没有办法解决这个问题,或上面的问题?
我总是以两种方式打开文件——读取访问和共享读取,或者读/写访问但不共享。
在我看来,允许共享写入总是会导致您在读取文件时发生意外的事情。有什么充分的理由以共享写入模式打开文件吗?
我正在使用以下JavaScript来动态加载样式表:
function set_stylesheet(name) {
var link = document.getElementById('userstylelink');
link.href = link.href.replace(/[^\/]+\.css$/, name + '.css');
}
Run Code Online (Sandbox Code Playgroud)
有没有办法确定是否成功加载了新的CSS文件?如果失败,我希望能够应用默认样式表.
深度克隆一组互连对象的最佳方法是什么?例:
class A {
B theB; // optional
// ...
}
class B {
A theA; // optional
// ...
}
class Container {
A[] a;
B[] b;
}
Run Code Online (Sandbox Code Playgroud)
显而易见的事情就是走向对象并深入克隆一切,因为我来到它.然而,这会产生一个问题 - 如果我克隆一个A
包含a 的那个B
,并且它B
也在Container
那里,B
那么克隆后我将克隆两次Container
.
下一个逻辑步骤是Dictionary
在克隆之前创建并查找每个对象.然而,这似乎可能是一个缓慢而无法解决的问题.
有什么想法吗?
我一直在寻找一份名为CodeView Symbolic Debug Information Specification的1990年代的Microsoft文档.它在PE/COFF规范中引用了它.关于这个文档的信息是稀疏的,我遇到的每个线索都以404结尾.不幸的是我没有任何旧的MSDN CD,这似乎结束了对少数人的搜索.
有没有人有副本,或知道我在哪里可以找到任何相关的规格?
对于在三角时间运行的算法,正确的大O表示法是什么?这是一个例子:
func(x):
for i in 0..x
for j in 0..i
do_something(i, j)
Run Code Online (Sandbox Code Playgroud)
我的第一直觉是O(n²)
,但我不完全确定.
我正在尝试以编程方式检索MySQL表的注释.向我建议的第一种方法是:
$shown = $db->query('show create table ' . TABLE_NAME)->fetch_row();
preg_match("/COMMENT='(.*)'/", $shown[0], $m);
$comment = $m[1];
Run Code Online (Sandbox Code Playgroud)
但这种解决方法让我感到畏缩.我偶然发现了另一种方式:
$result = $db->query("select table_comment from information_schema.tables where table_schema = '" .
DATABASE_NAME . "' and table_name = '" TABLE_NAME '\'')->fetch_row();
$comment = $result[0];
Run Code Online (Sandbox Code Playgroud)
它有点好(没有字符串解析),但它仍然让我感到不舒服,因为我正在挖掘内部结构,我不觉得自己属于.
有没有一个很好的,简单的方法来获取代码中的表注释?
c# ×2
optimization ×2
php ×2
big-o ×1
clone ×1
code-view ×1
const ×1
d ×1
debugging ×1
enums ×1
file-access ×1
file-io ×1
file-sharing ×1
generics ×1
java ×1
java-me ×1
javascript ×1
mmapi ×1
msdn ×1
mysql ×1
performance ×1
polymorphism ×1
schema ×1
streaming ×1
substr ×1