我正在使用Skype4COM控件.我的程序试图使用For循环从Skype中的联系人列表中删除大约3K联系人
1)这需要很多时间
2)它可能会崩溃,"MyApp已停止工作"
我的猜测是,我需要"减慢"我正在做的事情.
我会用Sleep()来做那件事吗?因为我不确定这是否会"暂停"Skype和我的程序之间的连接.
总结一下:我正在用大量的条目做一个动作,由于这个大的数量,我的程序挂了很长时间,并最终崩溃(有时).有办法防止这种情况吗?
Skype4COM顺便提一下STA.
正如Rob Kennedy先生所建议的那样,我已经到了需要停止将数据存储在VCL组件中并具有"基础数据结构"的地步.
首先,这个问题是关于"我如何建立基础数据结构".:)
我的层次结构由2级节点组成.
现在,我通过循环根节点来完成我的东西,其中我循环通过rootnode的子节点,以获得我需要的东西(数据).我希望能够将所有数据存储在所谓的底层数据结构中,以便我可以使用线程轻松修改条目(我想我能够做到这一点?)
但是,当循环遍历我的条目(现在)时,结果取决于节点的Checkstate - 如果我使用的是底层数据结构,我怎么知道我的节点是否被检查,当我的数据结构循环通过时,而不是我的节点?
假设我想使用2个级别.
这将是父母:
TRoot = Record
RootName : String;
RootId : Integer;
Kids : TList; //(of TKid)
End;
Run Code Online (Sandbox Code Playgroud)
那孩子:
TKid = Record
KidName : String;
KidId : Integer;
End;
Run Code Online (Sandbox Code Playgroud)
这基本上就是我现在所做的.评论说这不是最好的解决方案,所以我愿意接受建议.:)
我希望你理解我的问题.:)
谢谢!
我意识到我真的需要重写我的程序数据结构(不是现在,但很快,因为截止日期是星期一),因为我目前正在使用VST(VirtualStringTree)来存储我的数据.
我想要实现的是一个联系人列表结构.根节点是类别,子节点是联系人.共有2个级别.
但事实是,我需要一个联系人才能在一个以上的类别中显示,但它们需要同步.特别是Checkstate.
目前,为了保持同步,我遍历整个树来查找与刚刚更改的ID具有相同ID的节点.但是当存在大量节点时,这样做非常缓慢.
所以,我想:是否可以在多个类别中显示联系对象的一个实例?
注意:老实说,我并不是100%熟悉术语 - 我的意思是实例,是一个对象(或记录),所以我不必通过整个树来查找具有相同ID的联系对象.
这是一个例子:

如您所见,Todd Hirsch出现在测试类别和所有联系人中.但是在幕后,那些是2个PVirtualNodes,所以当我更改某个节点(如CheckState)上的属性,或节点的数据记录/类中的某个属性时,2个节点不同步.目前我可以同步它们的唯一方法是循环访问我的树,找到容纳相同联系人的所有节点,并将更改应用于它们及其数据.
总结一下:我正在寻找的是一种使用一个对象/记录的方法,并在我的树中的几个类别中显示它 - 每当一个节点被检查时,每个其他节点都包含相同的Contact对象.
我在这里有意义吗?
delphi synchronization virtualtreeview nodes data-structures
所以我今天刚刚安装了XAMPP,我注意到index.php检查了它是否是通过HTTPS访问的.在此之前,我认为为了使用SSL安全性,您需要一个证书,但我现在对此表示怀疑.
在这一点上(请纠正我,这就是这个问题的重点!),我自己的研究让我相信证书只提供有关您访问的位置的信息.如果未找到证书,则由客户决定他/她是否信任该连接.
XAMPP索引页面包含以下检查:
<?php
if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
$uri = 'https://';
} else {
$uri = 'http://';
}
$uri .= $_SERVER['HTTP_HOST'];
header('Location: '.$uri.'/xampp/');
exit;
?>
Run Code Online (Sandbox Code Playgroud)
好吧,所以我访问了我的Localhost https://localhost,以及Firefox"你相信这个网站吗?" 页面出现了(问题是:我能相信自己吗?;)).
之后,我test.php用以下代码创建了自己的小东西:
<?php
echo "Hi. \n";
if(isset($_POST['firstname']) && isset($_POST['lastname']))
{
echo "Your Firstname is ".$_POST['firstname']." and your Lastname is ".$_POST['lastname'];
echo "\r\n\r\n";
if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
echo "You are using SSL, arentcha? :)";
} else {
echo "Hmm.. No SSL!";
}
}
?>
Run Code Online (Sandbox Code Playgroud)
然后,我创建一个连接到一个Delphi应用程序 …
我在textarea中输入内容,按下按钮后,我的JS获取textarea输入并将其放入div标签中.
问题是,当我在textarea中输入换行符时,如下所示:
Hi
Goodbye
Run Code Online (Sandbox Code Playgroud)
它出现在div中
Hi<br><br>Goodbye
Run Code Online (Sandbox Code Playgroud)
当我使用Firebug实时检查实际的HTML标记时,我在div中看到了这一点:
Hi<br> <br> Goodbye
Run Code Online (Sandbox Code Playgroud)
这是我发现的一个函数,应该用breaktags替换换行符:
function nl2br (str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '\<br \/>' : '\<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
}
Run Code Online (Sandbox Code Playgroud)
这是我如何使用它:
etext = $('#mytext').val();
etext = nl2br(etext,false);
$('#mydiv').text(etext);
Run Code Online (Sandbox Code Playgroud)
但是如你所见,它无法正常工作.
我怎样才能做到这一点?如果您需要更多代码,请告诉我们
假设我有这个节点数据记录:
Type
PPerson = ^TPerson;
TPerson = record
Name: String;
Age: Integer;
SomeBool: Boolean;
end;
Run Code Online (Sandbox Code Playgroud)
要填充我的VirtualStringTree,我会这样做:
Procedure AddToTree(Person: TPerson);
Var
Node: PVirtualNode;
Data: PPerson;
Begin
Node := VT.AddChild(nil);
Data := VT.GetNodeData(Node);
Data.Name := Person.Name;
Data.Age := Person.Age;
Data.SomeBool := Person.SomeBool;
End;
Procedure TMyForm.MyButtonClick(Sender: TObject);
Var
Person: TPerson;
Begin
Person.Name := 'Jeff';
Person.Age := 16;
Person.SomeBool := False;
AddToTree(Person);
End:
Run Code Online (Sandbox Code Playgroud)
现在,虽然这很好用,但我想简化它,所以每当我向记录添加新字段时,我都不会修改AddToTree方法.
所以我尝试了这个:
Procedure AddToTree(Person: TPerson);
Begin
VT.AddChild(nil,@Person);
End;
Run Code Online (Sandbox Code Playgroud)
这个编译,但似乎PVirtualNode没有得到数据,因为我的VT没有显示任何东西,并且当打破OnGetText事件时,我看到变量是空的.
我究竟做错了什么?:)
在PHP手册中include,有一个用户贡献声明如下:
include()当用于加载配置信息时有一个可怕的安全漏洞,如果有人破坏了包含文件中的PHP标头,它会很乐意将配置文件打印到包含它作为纯文本的每个页面.
幸运的是,这种行为可以快速轻松地进行(本文中提到):
<?php
ob_start();//Hook output buffer
include("config.php");
ob_end_clean();//Clear output buffer
?>
Run Code Online (Sandbox Code Playgroud)
我知道以下将阻止任何输出,直到输出缓冲区被清除/解除/无论什么.但是,我不确定的是if someone corrupts the PHP header in the included file- 是什么可以在客户端/远程完成,或者如果我不小心给php文件一个不同的文件扩展名?
总而言之:外部用户如何破坏php标头?
我有以下伪结构.
[
{"product":
{
"id":"14",
"product_title":"My Awesome Product!",
"product_desc":"An awesome product.."
}
},
{"product":
{
"id":"15",
"product_title":"My MORE Awesome Product!",
"product_desc":"An AWESOMER product..."
}
}
]
Run Code Online (Sandbox Code Playgroud)
我正在迭代它:
$.post('Ajax.php',function(res){
res = res.pop();
$.each(res,function(product){
alert(product.product_title);
});
});
Run Code Online (Sandbox Code Playgroud)
但是,只显示了最后一个product_title.它不是通过所有这些.是我的代码还是我的JSON结构?谢谢!
编辑:原因.pop();:阅读jQuery JSON结构 - 无法让它工作
我一直在研究ObjectListView for .NET,并尝试过自己弄乱它.
我来自使用VirtualTreeview和Delphi,所以如果你能指出相似之处那就太棒了!
我尝试使用TreeListView和以下类创建一个多级树:
public class MyClass
{
public string Name { get; set; }
public List<MyClass> MyClasses { get; set; }
public MyClass(string name)
{
Name = name;
MyClasses = new List<MyClass>();
}
}
Run Code Online (Sandbox Code Playgroud)
TreeListView是一个设计时组件.我使用此代码创建虚拟数据并让TreeListView显示它.
var MyClasses = new List<MyClass>();
MyClasses.Add(new MyClass("Bob"));
MyClasses.Add(new MyClass("John"));
var myClass = new MyClass("Mike");
myClass.MyClasses.Add(new MyClass("Joe"));
MyClasses.Add(myClass);
treeListView1.SetObjects(MyClasses);
Run Code Online (Sandbox Code Playgroud)
我还有一个显示Name属性的列.
所有这一切都有效,除了我没有看到Mike节点的子节点.我似乎无法弄清楚在这做什么.我查看了文档,但找不到任何有用的信息.
此外,像这样的多级结构可以与ObjectListView的其他变体一起使用,例如FastObjectListView吗?
我正在尝试为我的NHibernate数据访问编写通用存储库.该Get<T>()方法应该能够采用一个可选的谓词,该谓词应该包含在查询中 - 也就是说,NHibernate应该在SQL中生成WHERE子句.
public virtual IList<T> Get(Func<T, bool> predicate = null)
{
// Open NHibernate Session
using (var session = NHibernateHelper.OpenSession())
return (predicate != null
? session.Query<T>().Where(predicate)
: session.Query<T>()).ToList();
}
Run Code Online (Sandbox Code Playgroud)
当我传入一个谓词,并观察NH生成的SQL语句时,我看不到where子句.
NHibernate何时执行查询?什么时候打电话.Query<T>()?如果是这样,我怎么能做到这一点?