textbox我的应用程序正常.
我可以使用鼠标将数据粘贴到它上面(右键单击 - >粘贴),但快捷方式Ctrl+ V什么都不做.
我该如何解决这个问题?
我正在开发一个在Windows Mobile 6上运行的应用程序,它需要能够从项目表格中检索包含给定字符串(由最终用户提供)的项目表中的所有项目.问题是表中大约有170,000个项目.由于我需要在描述中的任何位置返回包含字符串的所有项目,因此我不得不使用LIKE%string%,这样就无法使用索引.数据和表结构最初基于Progress数据库,它在任何单词索引字段上都有一个精彩的包含运算符.我们的移动应用程序不是这种情况,因为它使用的是SQL Server Compact 3.5.
基本上,我的DAL运行查询并检索SqlCeDataReader,然后使用ItemFactory创建仅包含匹配项的List对象.这显然可以让我们将域/业务对象与数据访问层分开.
精细和花花公子,除了在我搜索描述中包含类似"高尔夫"之类的所有项目时检索项目所需的8米和42秒.显然,这不是最终用户可接受的时间范围.
我的第一次尝试是使用SELECT*FROM Item"(在其中一个主索引字段上使用order by子句)从数据库中检索所有项目.此时,我在运行SqlCeDataReader时运行了IndexOf检查如果项目包含所请求的描述文本,则ItemFactory仅向List对象添加项目.这将速度提高到1m 46s.不是太破旧,但仍然太慢.
然后我尝试了另一种显示出承诺的方法......几乎......当应用程序启动时,我尝试创建一个包含数据库中所有项目对象的List(大约需要2分钟来运行查询并填充整个列表,但是至少它只是一次,因为应用程序正在初始化......仍然......呃).一旦列表完成,我可以轻松地在该列表上运行查询,执行以下操作(我希望我的语法正确...我现在不工作,我没有在PC上使用Visual Studio我坐在那里:
List<Item> specificItems =
AllItems.FindAll(i => i.Description.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0);
Run Code Online (Sandbox Code Playgroud)
这种方法将其降至21秒.非常好(虽然在宏伟的计划中仍然很慢).但是,问题是如果我从数据库加载所有项目,内存使用量太大了.在初始加载期间,我必须切断最后20,000个项目(所以21s时间框架可能更像是25s),因为抛出了OutOfMemoryException.根据模拟器上的内存管理器,我仍然有大约20 MB的空闲RAM,但我听说一个进程只能有32 MB或RAM相关联(不确定WM 6是否属实,但它出现了所以).
为了确保它不是因为我使用List对象来保存所有项目(我在构造函数中实例化了所需的容量以避免动态调整大小),我也读过它可能会导致额外的内存使用量implicity调用EnsureCapacity,我尝试使用Item []数组(提前调整大小).这仍然存在内存问题,尺寸差异可以忽略不计.
好吧漫无边际.我知道我可能会有一些如何限制datareader从数据库返回的记录(通过对不同类型字段的一些索引搜索),然后可能会在较小的项目子集上使用indexOf来获得最大性能(因此一起跳过Like运算符).这将导致最终用户不仅必须输入描述搜索(可能是项目层次结构信息以限制在其中搜索的项目类型).
有任何想法吗?我是以错误的方式来做这件事的吗?
谢谢你的聆听(对不起这篇文章很长,我有点大声思考).
哦,我应该添加(只是总结)我正在使用的东西:
更新:虽然下面提到的Bloom Filter方法看起来很有趣,但我无法满足一个要求(我上面没有真正说明).我无法真正匹配其他词语中包含的词语(例如"俱乐部"不会返回"俱乐部").因此,我被迫完全使用不同的方法(Kent Fredric ......感谢你指出这一点).我已经将Kent的答案标记为正确,因为他的方法是满足最多要求的(Mitch,你的问题与Jaunder建议的Bloom过滤器类似).但是,我采用了不同的方法(现在......),而不是他的方式.
我所做的是将所有项目对象拉入内存,只有项目编号和描述(这使其保持在内存限制之下,但它仍然会导致比我喜欢的更长的初始化...多线程并在后台加载该信息而应用程序正在运行可以照顾我猜).为了执行搜索,我编写了自己的包含例程.该例程使用非托管c#代码编写,该代码使用两个指针和几个循环来运行描述和所需的匹配文本.如果它在描述中的任何位置找到匹配项,则会将项目编号添加到数组中.搜索完所有项目后,新查询将返回到数据库并仅捕获匹配的项目编号(由于整数字段上的索引,该编号非常快).然后,这些项目在List中创建,包含所有信息(不仅仅是项目编号和描述).整个操作大约需要5-10秒(取决于描述),这对于现在来说已经足够了.
我仍然会考虑进一步优化它(可能能够跟踪搜索项的字符数...如果项目描述中剩余的字符少于所需的文本,则循环可以继续直接到下一个项目) .
任何建议仍然欢迎.现在我已将肯特的答案标记为我的问题"最正确".
向Dolch道具,帮助我编写包含例程.
performance memory-management windows-mobile sql-server-ce sql-like
有没有人知道一个开源库,用于为dotNET做TLS和SSL的ftp-client?
我们现在正在使用商业图书馆,但我们对此并不满意,所以我们正在考虑转换.所以不是自己滚动,有没有lgpl(或等效的)图书馆?
或者 - 如果我们必须自己推出(它将是LGPL或BSD或apache风格的许可证),有没有人知道我们可以开始的半完成代码库?
我有一个托管代码Windows服务应用程序,由于托管StackOverFlowException,它偶尔会在生产中崩溃.我知道这是因为我在崩溃模式下运行了adplus并使用SoS分析了故障转储.我甚至连接了windbg调试器并将其设置为"go unhandled exception".
我的问题是,我看不到任何托管堆栈或切换到任何线程.在调试器中断时,它们都被拆除了.
我不是Windbg专家,而且,除了在实时系统上安装Visual Studio或使用该工具进行远程调试和调试外,是否有人建议如何从违规线程中获取堆栈跟踪?
这就是我正在做的事情.
!线程
...
XXXX 11 27c 000000001b2175f0 b220已禁用00000000072c9058:00000000072cad80 0000000019bdd3f0 0 Ukn System.StackOverflowException(0000000000c010d0)
...
此时你会看到XXXX ID表明线程已经死了.
我有一个Windows Mobile应用程序,我想在其中检查设备方向.因此,我在我的一个表单中写了以下属性:
internal static Microsoft.WindowsCE.Forms.ScreenOrientation DeviceOriginalOrientation { get; private set; }
Run Code Online (Sandbox Code Playgroud)
奇怪的是,每当我打开UserControl时,即使UserControl不使用该属性,设计器也会显示此警告:
无法加载文件或程序集"Microsoft.WindowsCE.Forms,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 969db8053d3322ac"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
注释上述属性将关闭警告并再次显示用户控件.应用程序已成功构建,并且在两种情况下都可以正常运行.
有谁知道为什么会这样,我该如何解决?
我想要完成的是使用URLLoader类和URLRequest将一些二进制数据,特别是表示PNG图像的ByteArray上传到服务器.
当我将contentTypeURLRequest 的属性设置为'multipart/form-data'而不是默认值时,调用会urlLoader.load()导致安全异常.
当我将该contentType属性保留为默认属性时,它可以正常工作,但需要很长时间(与PNG文件的长度成比例)才能将文件上载到服务器.
所以,我的问题是为什么我得到这个安全例外?我怎么能避免它呢?
请注意,我的SWF是从开发服务器提供的,而不是本地文件系统(准确地说是Google App Engine开发服务器).
这是代码:
var pngFile:ByteArray = PNGEncoder.encode(bitmapData);
var urlRequest:URLRequest = new URLRequest('/API/uploadImage');
// With this line of code, the call to urlLoader.load() throws the following security exception:
// 'SecurityError: Error #2176: Certain actions, such as those that display a pop-up window, may only be invoked upon user interaction, for example by a mouse click or button press.'
urlRequest.contentType = 'multipart/form-data';
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = pngFile;
urlRequest.requestHeaders.push(new URLRequestHeader('Cache-Control', …Run Code Online (Sandbox Code Playgroud) securityexception file-upload urlrequest urlloader actionscript-3
我想在我的Inno Setup脚本中从我的application.exe中读取这三个值.
[assembly: AssemblyCompany("My Company")]
[assembly: AssemblyProduct("My Great Application")]
[assembly: AssemblyFileVersion("9.3.2")]
Run Code Online (Sandbox Code Playgroud)
有谁知道如何实现这一目标?
我知道我可以使用GetFileVersion获取最后一个("path/to/greatapp.exe") 前两个有类似的东西吗?
有没有办法检测用户是否点击了搜索栏文本字段并且键盘出现了?
我有以下问题:
我创建了一个批处理脚本,在那里调用自己(因为能够并行写入日志).在脚本中,我启动另一个进程(如start startServer.bat),它启动一个java进程并一直保持打开状态.
在我的原始脚本中,我等待30秒,检查进程是否正在运行并执行以下操作:
exit /B 0
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,窗口显示正在评估退出/ B 0,但窗口仍然保持打开状态.当我用另一个进程关闭窗口(意味着在我的.bat中启动"子"进程)时,我的脚本继续运行.
所以:
scriptA.bat
-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!
Run Code Online (Sandbox Code Playgroud)
如果我将另一个脚本包裹起来,那是非常奇怪的,例如:
scriptB.bat
-> call scriptA.bat
-----> in there I call: start startServer.bat
-----> wait 30 seconds
-----> check if server is started
-----> exit /B 0
-> scriptA.bat continues without any hangup!
Run Code Online (Sandbox Code Playgroud)
我也尝试了相同的退出0(没有/ B),同样的结果!在第一种情况下,它挂起,在第二种情况下,我的窗口按预期关闭...
你以前有没有人遇到这样的问题,知道这里有什么问题吗?流程挂断了!
.net ×4
c# ×4
batch-file ×1
cmd ×1
crash ×1
file-upload ×1
ftp ×1
inno-setup ×1
installer ×1
iphone ×1
objective-c ×1
open-source ×1
performance ×1
sos ×1
sql-like ×1
uisearchbar ×1
uitextfield ×1
urlloader ×1
urlrequest ×1
windbg ×1
winforms ×1