
我已经尽一切可能摆脱我认为在Win CE 6.0设备上运行的CF.NET 3.5中的HttpRequest或HttpResponse类的内存泄漏.我正在使用它们与IP摄像头进行通信.
以下是我正在使用的当前代码.代码在线程上的自定义控件中运行,其优先级设置为低于正常值,backgroundworker设置为true.在我的一个表单上有两个这样的控件对象.
我说当前是因为我尝试了异步请求和下面代码的其他排列而没有减少内存消耗:
protected void CamRefreshThread()
{
while (true)
{
if (false != CamEnabled)
{
HttpWebRequest HttpReq = null;
try
{
lock (LockObject)
{
// create request
HttpReq = (HttpWebRequest)WebRequest.Create("http://" + this.Ipv4Address + "/axis-cgi/jpg/image.cgi");
HttpReq.Timeout = 5000;
HttpReq.ReadWriteTimeout = 5000;
HttpReq.Credentials = new NetworkCredential(this.CamUserName, this.CamPassword);
}
/* indicate waiting for reponse */
ResponseRxed = false;
// get response
using (HttpWebResponse HttpResp = (HttpWebResponse)HttpReq.GetResponse())
{
// get response streamImageFromStream
using (Stream ImgStream = HttpResp.GetResponseStream())
{
// get bitmap …Run Code Online (Sandbox Code Playgroud) 因此,我的任务是编写一个 Python 脚本,该脚本访问 Win 32 DLL 以执行某些功能。该脚本需要从命令行接受参数然后输出其他参数。
我正在使用 ctypes,因为这是我发现的将参数传递给 Win 32 DLL 方法的最简单方法,但我很幸运能够从命令行获得固定的值数组,我通过这样做解决了这个问题:
seed = (ctypes.c_ubyte * 12)(
ctypes.c_ubyte(int(sys.argv[3], 16)), ctypes.c_ubyte(int(sys.argv[4], 16)),
ctypes.c_ubyte(int(sys.argv[5], 16)), ctypes.c_ubyte(int(sys.argv[6], 16)),
ctypes.c_ubyte(int(sys.argv[7], 16)), ctypes.c_ubyte(int(sys.argv[8], 16)),
ctypes.c_ubyte(int(sys.argv[9], 16)), ctypes.c_ubyte(int(sys.argv[10], 16)),
ctypes.c_ubyte(int(sys.argv[11], 16)), ctypes.c_ubyte(int(sys.argv[12], 16)),
ctypes.c_ubyte(int(sys.argv[13], 16)), ctypes.c_ubyte(int(sys.argv[14], 16))
)
Run Code Online (Sandbox Code Playgroud)
但这无论如何都不是动态的,我尝试在数组初始化中使用 for 循环来执行此数组初始化,但没有成功。
我对 Python 完全陌生,发现用其他语言完成我认为简单的任务相当困难(不是抨击该语言,只是发现它不像其他语言那样直观地完成此类任务)。
那么,有没有一种方法可以简化这个数组的初始化,其中条目本身的数量可能是可变的?
我搜索了又搜索,但没有找到解决我问题的方法。
所有正面和负面的评论都将受到赞赏,并且都将始终作为一种学习经历:)